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.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.