Script automatico per copiare i propri backup da CD/DVD a hard disk/nas

14/4/2010. Di recente ho deciso di non salvare più i miei backup su CD/DVD e di trasferire tutto su un hard disk da 2 terabyte. Non è economico, ma quello che da una parte si spende di più (una tantum) si guadagna dieci volte tanto in quanto a rapidità, semplicità e spazio fisico occupato. Quindi ho acquistato un disco da 2TB e l’ho inserito in un box usb esterno.
Salvare i dati “nuovi” sull’hard disk è poca cosa, ma invece copiare tutti i contenuti di alcune centinaia di “vecchi” dischi ottici è un’altra storia, infatti farlo manualmente disco per disco sarebbe un’opera titanica; per questo avevo immaginato che esistesse un programma apposito che fosse in grado di trasferire i dati da CD/DVD a disco rigido in maniera automatica, richiedendomi solo di cambiare i dischi di volta in volta.
In altre parole tutto quello che volevo fare era aspettare che il disco appena copiato venisse espulso, cambiarlo con quello successivo e richiudere il cassettino continuando a usare il pc per altre cose, qualunque cosa fosse (scrivere questa guida ad esempio, mentre di tanto in tanto allungo il braccio e sostituisco i cd). Naturalmente per la legge di Murphy un programma del genere non esisteva, o almeno un’ora di ricerche non ha portato a nulla, quindi o lo scrivevo da me, oppure facevo tutto a mano trascinando i file sul nuovo hard disk un CD/DVD alla volta; scrivere un programma richiede molto meno tempo che fare un lavoro del genere a mano, quindi ecco qui i risultati.

La mia scelta è caduta su AutoHotKey come linguaggio di scripting (l’ho già usato in passato, ed ha proprio le funzioni di cui avevo bisogno), quindi in un’ora di lavoro studiando il linguaggio, ho scritto alcune righe di codice che fanno esattamente quello che mi serve.
In breve, ecco il listato della routine (non copiatelo ancora, leggete le spiegazioni alla fine):

while 1
{
	empty = 1

	while empty
	{
		DriveGet, status, StatusCD, E:

		if (status = "stopped" OR status = "not ready")
			empty = 0
		
		Sleep, 500
	}


	SetWorkingDir, E:\

	Loop, *.*, 2, 1
		FileCreateDir, M:\%A_LoopFileFullPath%
	
	Loop, *.*, , 1
	{
		if (A_LoopFileName != "filename1.ext"
		&& A_LoopFileName != "filename2.ext"
		&& A_LoopFileName != "filename3.ext")
		{
			docopy = 0
			IfExist, M:\%A_LoopFileFullPath%
			{
				MsgBox, 4, Overwrite file?, Overwrite file %A_LoopFileFullPath%?
				IfMsgBox, Yes
					docopy = 1
			}
			else
				docopy = 1
			if docopy = 1
				FileCopy, %A_LoopFileLongPath%, M:\%A_LoopFileFullPath%, 1
			if ErrorLevel
				MsgBox, Could not copy "%A_LoopFileLongPath%" to "M:\%A_LoopFileFullPath%" with ErrorLevel = %ErrorLevel%.
			ErrorLevel = 0
		}
	}

	Drive, Eject, E:
	
	SetWorkingDir, C:\
}
	

Come dicevo prima, non mettetelo ancora in funzione, è quasi sicuro che dovrete modificarlo.
Sostituite TUTTE le occorrenze di “E:” con la lettera giusta del lettore cd/dvdrom che userete.
Sostituite TUTTE le occorrenze di “M:” con la lettera giusta del disco rigido su cui volete copiare i dati.
La parte con “filenameX.ext” è per mia comodità, e forse anche per la vostra: ci sono alcuni file su quasi tutti i miei dischi che non vanno copiati sul disco rigido, si tratta dei cataloghi dei file, di alcuni eseguibili per riprodurre i video, eccetera; quella parte del codice è proprio per inserire il nome di questi file che volete vengano ignorati durante la copia. Se ve ne servono più di tre, basta ripetere la riga al centro più volte, se ve ne servono di meno, o nessuno, o modificate lo script, oppure se non avete idea di come fare potete lasciare tutto com’è, non credo che nei vostri backup ci siano file con nome “filenameX.ext”, quindi il programma funzionerà come se nulla fosse. Il comando “SetWorkingDir, C:\” è solo un passaggio temporaneo necessario per non interrompere il procedimento mentre cambiate dischi, lasciate tutto così purché abbiate un drive C:!

Salvate il codice in un file testuale con estensione .ahk, installate AutoHotKey e fate doppio click sul file che avete creato; se riceverò abbastanza richieste, troverò la voglia di creare un file eseguibile per avviare la routine senza dover installare autohotkey. Questo è il funzionamento del programma: quando viene lanciato, non fa nulla a meno che non trovi un disco inserito nel lettore ottico; appena inserite un disco inizia a copiare tutti i file sul disco rigido di destinazione (esclusi quelli che vanno ignorati, se presenti), ricreando la struttura delle cartelle presente su CD/DVD. Se ci sono file che esistono già sul disco rigido (perché magari presenti anche in altri dischi già copiati) il programma vi chiede se volete sovrascriverli o meno; a questo punto sorge un problema, perché nel mio caso anche se scelgo di sovrascrivere il file ricevo comunque un errore, ma premendo OK il programma continua ugualmente a funzionare; se accade anche a voi ed avete necessità di sovrascrivere comunque il file, allora vi conviene piuttosto cancellare manualmente il file già presente sulla destinazione e dare l’ok per sovrascrivere; oppure potete modificare lo script per fare in modo che salti del tutto i file già esistenti (ma io preferisco comunque avere una notifica, non si sa mai). Ad ogni modo, una volta che il disco ottico è stato completamente copiato, lo script “sputa fuori” il cassettino e si ferma, e avrete tutto il tempo di cambiarlo con quello successivo; poco dopo che avrete richiuso il cassettino, senza dover fare altro lo script ricomincerà a copiare i file, e così via; per fermare il procedimento, fate clic destro sull’icona verde con la lettera H nell’area di notifica, e premete Exit.

Ho testato lo script solo sul mio pc, e non ho tempo di fornire supporto se sul vostro non funziona. Ho comunque pensato che sarebbe stato utile condividere questo lavoro nel caso in cui qualcun altro avesse dovuto fare la stessa cosa.
Per la cronaca, finora il 4% dei CD risultava illegibile al punto da non permettere di essere copiato; non sono ancora giunto al punto in cui iniziai ad usare i DVD; per quanto riguarda le statistiche, il primo posto dei CD non leggibili va ai Verbatim Datalife (non plus), il secondo (una sorpresa) ai TDK Reflex, e all’ultimo ci sono i Traxdata tx; un’altra sorpresa, una marca sconosciuta di CDr con die verde, “CDV”, i primissimi che comprai, quindi anche quelli masterizzati più tempo fa (si parla di 9 anni), sono risultati tutti perfettamente leggibili, anche se non sempre a buone velocità; risultati perfetti, con alte velocità di lettura, sia per i TDK metalAZO con superficie bianca stampabile, che per i Verbatim DataLifePlus con superficie argentata, entrambi (ovviamente) con die blu; menzione d’onore sia per i TDK d-view che per i Verbatim Pastel-Disc, che sono risultati tutti leggibili.

5 commenti su “Script automatico per copiare i propri backup da CD/DVD a hard disk/nas”

  1. Incredibile, stavo cercando un programmino che faceva la stessa identica cosa, gia’ pronto (visto che sai quanto sono pigro), e immagina la sorpresa di trovane uno proprio sul tuo sito 🙂
    Ovviamente, visto che la mia pigrizia è asintotica, l’ho modifcato in modo che non mostri nessun messagbox se il file è gia’ presente e nel caso non riesca a copiarlo (sto eliminando un centinaio di cd di mp3 vecchissimi, se perdo qualcosa non è un poi un dramma…)

  2. non mi funziona correttamente..
    quando inserisco il secondo dvd mi esce un errore e nell’ hd mi si creano un sacco di file diversi.

    1. Mi dispiace che non ti sia andata bene, esistono delle variabili con autohotkey per quanto riguarda il check dello stato del lettore dvd in base al tipo di disco presente, e forse anche per la creazione dell’albero delle cartelle sul disco fisso (permessi vari ecc?). Forse hai solo bisogno di eseguire lo script come amministratore.
      In ogni caso a me il tutto è servito una sola volta, ovviamente, una volta passati i file non ne ho più bisogno, e come dico non fornisco supporto in caso di problemi, dopotutto mi sono anche dimenticato la sintassi AHK nel frattempo 😉
      Ti consiglio di usare lo script fornito come base di partenza, documentarti sul tipo di errore che ricevi, e correggere il codice in base alle informazioni che troverai su internet.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.