72707 Letture

Effettuare il backup di file e cartelle con un semplice script batch

I buoni vecchi script batch tornano sempre utili. In Windows, per automatizzare il backup del contenuto di alcune cartelle, è possibile servirsi di un semplice script che si farà carico di creare una copia di sicurezza di interi percorsi.
Particolarmente utile allo scopo è il comando XCOPY. Lo impiegheremo insieme con alcuni "switch" in modo da regolarne il comportamento. Com'è possibile verificare nello script sotto riportato, XCOPY viene invocato utilizzando gli switch /c /d /e /h /i /r /y : in rigoroso ordine alfabetico, riassumiamo brevemente il significato di ciascuno di essi.

/c continua la copia dei file e delle cartelle anche qualora dovesse verificarsi un errore. Nel caso in cui risultasse impossibile copiare un file, per un qualsiasi motivo, la procedura di copia degli altri elementi non verrà interrotta.
/d richiede di copiare solamente i file modificati dopo una certa data. Dal momento che, in questo caso, non viene specificata alcuna data, XCOPY provvede a copiare solo i file la cui data di creazione risulta posteriore a quella del file omonimo eventualmente contenuto nella cartella di destinazione.
/e permette di copiare tutte le cartelle, comprese le sottocartelle eventualmente presenti. Utilizzando, in alternativa, l'opzione /s, XCOPY copierà esclusivamente le cartelle non vuote.
/h copia anche file nascosti e file di sistema.
/i se la destinazione non esiste e la copia riguarda più file, verrà presupposto che la destinazione sia una directory.
/r provvede a sovrascrivere anche gli eventuali file dotati dell'attributo di sola lettura.
/y evita che lo script chieda conferma ad ogni eventuale operazione di sovrascrittura dei file, dalla cartella sorgente a quella di destinazione.

Nello script batch che segue abbiamo concentrato la nostra attenzione solamente sulle catelle predefinite per la memorizzazione dei documenti, del contenuto del desktop di Windows, dell'elenco dei siti web preferiti di Internet Explorer. Sarà comunque semplice aggiungere nuovi percorsi (ad esempio se si è soliti memorizzare i propri file in altre directory od in altre unità).

@ECHO OFF


SET Versione=sconosciuta
VER | FINDSTR /IL "5.0" > NUL
IF %ERRORLEVEL% EQU 0 SET Versione=2000
VER | FINDSTR /IL "5.1." > NUL
IF %ERRORLEVEL% EQU 0 SET Versione=XP
VER | FINDSTR /IL "6.0." > NUL
IF %ERRORLEVEL% EQU 0 SET Versione=Vista
VER | FINDSTR /IL "6.1." > NUL
IF %ERRORLEVEL% EQU 0 SET Versione=Seven

if %Versione%==Vista goto WINVISTA
if %Versione%==Seven goto WIN7
if %Versione%==2000 goto WIN2000
if %Versione%==XP goto WINXP
goto FINE

:WINVISTA
:WIN7
xcopy /c /d /e /h /i /r /y "%USERPROFILE%\Documents" "BACKUP_%COMPUTERNAME%_%date:/=-%\%USERNAME%\Documents"
xcopy /c /d /e /h /i /r /y "%USERPROFILE%\Desktop" "BACKUP_%COMPUTERNAME%_%date:/=-%\%USERNAME%\Desktop"
xcopy /c /d /e /h /i /r /y "%USERPROFILE%\Favorites" "BACKUP_%COMPUTERNAME%_%date:/=-%\%USERNAME%\Favorites"
goto FINE

:WIN2000
:WINXP
xcopy /c /d /e /h /i /r /y "%USERPROFILE%\Documenti" "BACKUP_%COMPUTERNAME%_%date:/=-%\%USERNAME%\Documenti"
xcopy /c /d /e /h /i /r /y "%USERPROFILE%\Desktop" "BACKUP_%COMPUTERNAME%_%date:/=-%\%USERNAME%\Desktop"
xcopy /c /d /e /h /i /r /y "%USERPROFILE%\Preferiti" "BACKUP_%COMPUTERNAME%_%date:/=-%\%USERNAME%\Preferiti"

:FINE
SET Versione=
echo Backup completato.


Il funzionamento dello script è piuttosto semplice. In prima battuta, viene utilizzato un espediente per cercare di stabilire la versione di Windows installata sul sistema. Per far ciò viene invocato il comando VER ed analizzato il suo output. A seconda del numero di versione rilevato, viene creata una nuova variabile (denominata Versione) ed all'interno di essa viene memorizzata una stringa facente riferimento alla versione del sistema operativo in uso.
E' stato previsto il rilevamento di Windows 2000, Windows XP, Windows Vista e Windows 7 (il comando VER indica, ad esempio, Windows 7 come Windows 6.1 mentre Windows Vista come Windows 6.0). Se si volesse aggiungere anche Windows Server 2003, si dovrà – ad esempio – inserire qualcosa di simile:
VER | FINDSTR /IL "5.2." > NUL
IF %ERRORLEVEL% EQU 0 SET Versione=2003

Successivamente bisognerà comunque aggiungere del codice per trattare anche l'eventualità che lo script batch sia eseguito su Windows Server 2003 o su Windows Server 2008.

A seconda del sistema operativo installato, vengono quindi eseguiti comandi differenti. L'approccio scelto consente di lavorare sulle cartelle appropriate, che differiscono a seconda della versione di Windows. Ad esempio, se in Windows XP in italiano la cartella contenente i segnalibri di Internet Explorer si chiama "Preferiti", in Windows 7 in italiano diventa "Favorites".

Come cartella di destinazione (secondo argomento del comando XCOPY), viene indicata la seguente:
"BACKUP_%COMPUTERNAME%_%date:/=-%\%USERNAME%\nome_cartella"
Ciò significa che, appena avviato lo script batch, esso provvederà a creare una nuova cartella – nella stessa directory ove è stato salvato il file .BAT – e le assegnerà il nome BACKUP_nome_del_computer_data_creazione.
Utilizzando %date:/=-% si legge la variabile di sistema contenente la data corrente (orologio di Windows) e si sostituisce il carattere "/" con "-". Quest'ultima operazione di sostituzione è indispensabile perché Windows non accetta la barra all'interno dei nomi di file e cartelle.

Prima di lanciare lo script od effettuare qualunque intervento, assicuretevi comunque più e più volte della correttezza dei percorsi sorgente e destinazione specificati.


Aggiungendo un'istruzione come xcopy /c /d /e /h /i /r /y "%APPDATA%\Microsoft\Address Book" "BACKUP_%COMPUTERNAME%_%date:/=-%\%USERNAME%\Address Book" si può ad esempio aggiungere, nel caso di Windows XP, la copia della rubrica di Outlook Express.

Analogamente si possono copiare le directory degli altri browser web e degli altri client di posta elettronica contenenti preferenze, segnalibri, archivi e-mail, firme per i messaggi, rubrica e così via.


  1. Avatar
    Michele Nasi
    28/01/2011 16.43.38
    Ne abbiamo parlato anche qua: http://www.ilsoftware.it/articoli.asp?id=5398" onclick="window.open(this.href);return false; Sta poi al lettore scegliere la soluzione che più gli aggrada. :wink:
  2. Avatar
    Giovanni DP
    28/01/2011 14.50.43
    Perchè non usare invece robocopy 8sempre gratuito e fornito da Microsoft) che permette di
    -non bloccarsi se il file è bloccato,
    -può fare dei backup incrementali "saltando" i file già presenti nella destinazione e non modificati,
    -definire quali tipi di file (o anche quali cartelle ) NON backupppare,
    ...ed un sacco di altre opzioni visibili nel manuale fornito (circa 10 pagine di .doc)?
Effettuare il backup di file e cartelle con un semplice script batch - IlSoftware.it