Backup automatico di file e cartelle su un'unità rimovibile

Avete mai pensato come potrebbe essere comodo effettuare un backup automatico del contenuto di cartelle specifiche su un'unità rimovibile (un hard disk esterno od una penna USB, ad esempio), non appena questa venga collegata al personal comput...

Avete mai pensato come potrebbe essere comodo effettuare un backup automatico del contenuto di cartelle specifiche su un’unità rimovibile (un hard disk esterno od una penna USB, ad esempio), non appena questa venga collegata al personal computer?

Ben lungi dal voler proporre una soluzione “definitiva”, illustriamo in quest’articolo una metodologia, semplice da applicare, che non richiede l’impiego di nessuna utilità sviluppata da terze parti.

Premettiamo subito, inoltre, che lo script .vbs in grado di effettuare la copia automatizzata delle cartelle indicate può essere ampiamente migliorato. Anzi, vi invitiamo ad inviarci i vostri commenti in merito sottoponendoci proposte di modifica.

Mettendo in pratica i suggerimenti presentati nell’articolo, ogniqualvolta si connetta l’unità disco esterna al sistema in suo, uno script – eseguito in modo automatico – si farà carico di creare una copia di backup delle cartelle specificate, dei file in essi contenuti e di tutte le eventuali sottocartelle. Ogni directory oggetto del backup, verrà automaticamente memorizzata, a sua volta, all’interno di una cartella avente il nome del computer in uso.
In questo modo, collegando l’unità rimovibile al COMPUTER1, le cartelle oggetto del backup verranno salvate nella directory \COMPUTER1; connettendo la periferica al COMPUTER2, le directory indicate saranno invece salvate in \COMPUTER 2 e così via.

Per verificare il nome assegnato al computer che si sta utilizzando, è sufficiente fare clic con il tasto destro del mouse sull’icona Risorse del computer quindi sulla scheda Nome computer.

Nei nostri test abbiamo usato un comunissimo “hard drive case” USB 2.0 (Sitecom MD-206) installandovi, al suo interno, un disco fisso SATA.

Dopo aver collegato il disco fisso al personal computer attraverso il cavo USB in dotazione con l'”hard drive case”, abbiamo creato, nella directory radice dell’unità, il seguente file VBScript (backup.vbs):

Dim computername
Dim ParentFolder
Dim objShell
Dim objFolder
Set WshNetwork = WScript.CreateObject("WScript.Network")
computername = WshNetwork.ComputerName

Set WshShell = WScript.CreateObject("WScript.Shell")

Const FOF_CREATEPROGRESSDLG = &H0&
Const FOF_NOCONFIRMATION = 16
Const FOF_NOCONFIRMDIRCREATE = 512

ParentFolder = WshShell.CurrentDirectory

creadirectory ParentFolder
if right(ParentFolder,1)"\" then ParentFolder=ParentFolder&"\"
           
select case computername
           ' modificare inserendo altri computer e le varie cartelle
           ' oggetto del backup:
           ' -------------------------------------------------------
           case "MIOCOMPUTER"
                      copiafile "d:\documenti", ParentFolder&computername
                      copiafile "c:\lavori", ParentFolder&computername
                      copiafile "c:\foto\rossi", ParentFolder&computername
                      copiafile "C:\prova\test", ParentFolder&computername
           ' -------------------------------------------------------
           ' fine modifiche
end select

function creadirectory (nomedirectory)
           Set objShell = CreateObject("Shell.Application")
           Set objFolder = objShell.NameSpace(nomedirectory) 
           objFolder.NewFolder computername
end function

function copiafile (sorgente, destinazione)
           Set objShell = CreateObject("Shell.Application")
           Set objFolder = objShell.NameSpace(destinazione)
           objFolder.CopyHere sorgente, FOF_CREATEPROGRESSDLG + FOF_NOCONFIRMATION
+ FOF_NOCONFIRMDIRCREATE
end function

WScript.Quit

Analizziamo rapidamente il funzionamento dello script. L’istruzione alla riga 6 (computername = WshNetwork.ComputerName), si occupa di recuperare il nome del computer in uso mentre l’istruzione alla riga 14, la lettera identificativa dell’unità rimovibile.

Successivamente (riga 16) viene invocata una funzione (function creadirectory (nomedirectory)) che si occupa di creare, nella directory radice dell’unità rimovibile, una cartella alla quale viene assegnato il nome del computer (riga 34) precedentemente rilevato.

Alla riga 17 viene controllato che la lettera identificativa dell’unità rimovibile contenga un “backslash” (barra rovesciata) finale; in caso contario, viene aggiunto.

Il select case alla riga 19, permette di definire un comportamento diverso per ciascun computer al quale l’unità esterna viene collegata.
Nell’esempio (riga 22), lo script VBS – nel caso in cui venga eseguito su un sistema denominato MIOCOMPUTER – provvede a creare una copia delle cartelle di seguito indicate (righe 23-26) utilizzando la funzione copiafile.
Tale funzione, com’è possibile verificare, riceve in ingresso la cartella contenente i file oggetto del backup e la cartella di destinazione.
L’operazione di copia dei file e delle cartelle avviene (riga 40) usando le preferenze definite mediante l’impiego delle costanti FOF_CREATEPROGRESSDLG, FOF_NOCONFIRMATION e FOF_NOCONFIRMDIRCREATE (righe 10-12).
Se non si desidera che venga mostrata una finestra di dialogo durante la copia, FOF_CREATEPROGRESSDLG va impostato a &H4&; viceversa, il valore della costante deve essere posto a &H0& (riga 10).

Le altre due costanti, invece, permettono, rispettivamente, di non richiedere alcuna conferma in caso di sovrascruttura di file e cartelle né all’atto della creazione di nuove directory.

Le righe 22-26 sono ovviamente liberamente personalizzabili. E’ sufficiente sostituire le cartelle inserite a titolo esemplificativo nel file con quelle oggetto di backup avendo cura di modificare (riga 22) anche il nome del computer.
Aggiungendo una nuova istruzione case "NOMECOMPUTER" dopo la riga 26, quindi specificando, nelle righe seguenti, le directory d’interesse (esempio: copiafile "X:\CARTELLA_ORIGINE", ParentFolder&computername), è possibile fare in modo che lo script VBS si comporti in modo adeguato ogniqualvolta venga connessio al computer A, B o C.

Avvio del backup automatico

Come passo finale, è necessario copiare nella directory radice dell’unità rimovibile i file autorun.bat, autorun.inf e backup.ico.
Per comodità tali file (compreso lo script backup.vbs) sono scaricabili cliccando qui.
Si noti che lo script contenuto nel file compresso Zip, utilizza l’istruzione Const FOF_CREATEPROGRESSDLG = &H4&: la finestra che informa sullo stato di avanzamento dell’operazione di copia di file e cartelle non viene mostrata. Per farla comparire è necessario impostare il valore della costante a &H0& (riga 10).

A questo punto si provveda a scollegare l’unità rimovibile USB (Rimozione sicura dell’hardware, in basso a destra) per poi riconnetterla: la procedura di “autoplay” dovrebbe venire immediatamente avviata. A video dovrebbe infatti comparire la finestra seguente:

Facendo doppio clic sulla prima voce, dovrebbe venire avviata la procedura di backup dei dati.

Qualora ciò non dovesse accadere (mancata comparsa della finestra contenente l’indicazione Cliccare qui per avviare il backup automatico utilizzando il programma presente nel dispositivo), è probabile che abbiate disattivato l'”autorun”, almeno per certe tipologie di periferiche.
Chi ha esperienza con le modifiche sul registro di sistema di Windows, può portarsi in corrispondenza della chiave HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer. Il valore di default (esadecimale) di NoDriveTypeAutoRun è 91. Utilizzando tale impostazione, Windows non esegue l'”autoplay” solamente sui dispositivi sconosciuti e sulle unità di rete. Il valore 91 risulta dalla somma di 1+80+10, come si evince dalla tabella seguente.

1 disabilita l’autoplay sulle unità sconosciute
4 disabilita l’autoplay sui dischi floppy
8 disabilita l’autoplay sui dischi fissi
10 disabilita l’autoplay sulle unità di rete
20 disabilita l’autoplay sulle unità CD ROM
40 disabilita l’autoplay sulle unità RAM
80 disabilita l’autoplay sulle unità sconosciute
FF disabilita l’autoplay su tutte le unità

Qualora NoDriveTypeAutoRun fosse impostato sul valore FF (decimale: 255), non verrebbe eseguito l’autoplay su nessuna unità, CD/DVD ROM compresi.

Come anticipato nell’introduzione, lo script VBS (backup.vbs) potrebbe essere ampiamente migliorato. Si potrebbe ad esempio fare in modo che l’utente non sia costretto a specificare file e cartelle oggetto del backup direttamente all’interno dello script ma che le sue preferenze siano specificabili mediante l’utilizzo di un file di testo.
Ulteriori sviluppi potrebbero essere mirati all’ottimizzazione della procedura di backup: attraverso una finestra di dialogo l’utente potrebbe richiedere un backup completo od uno che si limiti solamente a copiare i file aggiornati.

Fateci conoscere il vostro parere e come, eventualmente, avete migliorato lo script VBS.

Ti consigliamo anche

Link copiato negli appunti