Magazine Tecnologia

Backup tramite script VBS

Creato il 19 maggio 2011 da Italiangeek

Backup tramite script VBS

Backup tramite script VBS

Per effettuare il backup automatico del contenuto di alcune cartelle memorizzate sul disco fisso vi sono, com’è noto, numerose metodologie: è possibile affidarsi all’utilità di Windows, utilizzare programmi “ad hoc” sviluppati da terze parti oppure servirsi di appositi script in grado di sovrintendere l’intera procedura.

Questa volta vi proponiamo uno script VBS che consente di creare una copia del contenuto delle directory indicate dall’utente attraverso la modifica di un file di configurazione (config.ini). Il nostro script provvede a “leggere” il contenuto del file .INI in modo da stabilire quali cartelle debbono essere oggetto di backup nel caso del sistema in uso.

Per ciascuna macchina presente nella propria infrastruttura, si possono specificare le cartelle il cui contenuto deve essere messo in sicurezza (ad esempio, salvato in un’unità rimovibile).

Lo script VBS crea automaticamente una cartella col nome identico a quello assegnato alla macchina in uso. Tale denominazione corrisponde a quella che compare cliccando con il tasto destro destro sull’icona Computer, in Windows Vista così come in Windows 7, quindi sulla voce Proprietà:

Backup tramite script VBS

In Windows XP, è il nome che può essere rilevato cliccando con il tasto destro del mouse sull’icona Risorse del computer, su Proprietà, infine sulla scheda Nome computer:

Backup tramite script VBS

Ecco il nostro file “config.ini“:


; File di configurazione
; ISTRUZIONI:
; Per richiedere il backup del contenuto di cartelle specifiche, è necessario utilizzare la seguente struttura:
;
[XARABAS]
1=C:\Documents and Settings\cappello\Documents\Music
2=C:\Documents and Settings\cappello\Documents\Personal

Per eseguire il backup di altre cartelle è sufficiente cambiare il valore delle variabili 1 e 2 inserendo il percorso delle directory che si vogliono backuppare, si possono aggiungere anche altre variabili (3=….).

Mentre lo script “backup.vbs” che effettivamente esegue il backup è:


' BACKUP AUTOMATICO FILE E CARTELLE

'recupera il nome associato alla macchina in uso
Set WshNetwork = WScript.CreateObject("WScript.Network")
computername = WshNetwork.ComputerName

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

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

'recupera la cartella dalla quale è eseguito lo script VBS
ParentFolder = WshShell.CurrentDirectory

'crea una cartella col nome attribuito al sistema in uso
creadirectory ParentFolder,computername
if right(ParentFolder,1)<>"\" then ParentFolder=ParentFolder&"\"

Set fso = CreateObject("Scripting.FileSystemObject")
'imposta la cartella di destinazione (unitàcorrente:\nomecomputer\)
ComputernameFolder=ParentFolder&computername&"\"

c=1
f=0
do
SourceFolder=ReadIni(ParentFolder&"config.ini",computername,c)
if SourceFolder="" and c=1 then WScript.Echo "Il file di configurazione (config.ini) non è stato inizializzato per il sistema in uso ("& computername &")."&vbcrlf&"Aprirlo con un normale editor di testo e fare riferimento alle istruzioni."
if SourceFolder=" " and c=1 then WScript.Echo "Per il sistema in uso non è stata indicata alcuna cartella sorgente."&vbcrlf&"Aprire il file config.ini con un normale editor di testo e fare riferimento alle istruzioni per modificarlo."

if trim(SourceFolder)<>"" then
if fso.FolderExists(SourceFolder) then
creadirectory ComputernameFolder,lastfolder(SourceFolder)
DestinationFolder=ComputernameFolder&lastfolder(SourceFolder)
copia SourceFolder,DestinationFolder
else
WScript.Echo "La cartella "& SourceFolder &" non esiste."&vbcrlf&"Impossibile copiare i dati nell'unità di destinazione."
end if
end if
c=c+1
loop until SourceFolder="" or SourceFolder=" "

function copia(sorgente,destinazione)
Set fileCol = fso.GetFolder(sorgente).Files
Set dirCol = fso.GetFolder(sorgente).Subfolders

if right(destinazione,1)<>"\" then destinazione=destinazione&"\"

For Each objSubfolder in dirCol
sottodirectory=objSubfolder.Name
creadirectory destinazione,sottodirectory
copia sorgente&"\"&sottodirectory,destinazione&sottodirectory
Next

' WScript.Echo sorgente &" -- "& destinazione

For Each objFile in fileCol
If not fso.FileExists(destinazione & objFile.Name) Then
' Copia il file se non esiste nella cartella di destinazione
objFile.Copy destinazione
f=f+1
Else
If objFile.DateLastModified > fso.GetFile(destinazione & objFile.Name).DateLastModified Then
'Se il file sorgente è più recente di quello di destinazione procede con la copia
objFile.Copy destinazione, True
f=f+1
End If
End If
Next
Set fileCol=Nothing
Set dirCol=Nothing
end function

function lastfolder(percorso)
s=array()
if instr(percorso,"\") > 0 then
s=split(percorso,"\")
lastfolder = s(ubound(s))
end if
end function

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

Set objFolder=Nothing
Set objShell=Nothing
end function

Function ReadIni(myFilePath, mySection, myKey)
' This function returns a value read from an INI file
'
' Arguments:
' myFilePath [string] the (path and) file name of the INI file
' mySection [string] the section in the INI file to be searched
' myKey [string] the key whose value is to be returned
'
' Returns:
' the [string] value for the specified key in the specified section
'
' CAVEAT: Will return a space if key exists but value is blank
'
' Written by Keith Lacelle
' Modified by Denis St-Pierre and Rob van der Woude
' Riga 128 modificata da Michele Nasi

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

Dim intEqualPos
Dim objFSO, objIniFile
Dim strFilePath, strKey, strLeftString, strLine, strSection

Set objFSO = CreateObject("Scripting.FileSystemObject")

ReadIni = ""
strFilePath = Trim( myFilePath )
strSection = Trim( mySection )
strKey = Trim( myKey )

If objFSO.FileExists( strFilePath ) Then
Set objIniFile = objFSO.OpenTextFile( strFilePath, ForReading, False )
Do While objIniFile.AtEndOfStream = False
strLine = Trim( objIniFile.ReadLine )

' Check if section is found in the current line
If LCase( strLine ) = "[" & LCase( strSection ) & "]" Then
if not objIniFile.AtEndOfStream then strLine = Trim(objIniFile.ReadLine)

' Parse lines until the next section is reached
Do While Left( strLine, 1 ) <> "["
' Find position of equal sign in the line
intEqualPos = InStr( 1, strLine, "=", 1 )
If intEqualPos > 0 Then
strLeftString = Trim( Left( strLine, intEqualPos - 1 ) )
' Check if item is found in the current line
If LCase( strLeftString ) = LCase( strKey ) Then
ReadIni = Trim( Mid( strLine, intEqualPos + 1 ) )
' In case the item exists but value is blank
If ReadIni = "" Then
ReadIni = " "
End If
' Abort loop when item is found
Exit Do
End If
End If

' Abort if the end of the INI file is reached
If objIniFile.AtEndOfStream Then Exit Do

' Continue with next line
strLine = Trim( objIniFile.ReadLine )
Loop
Exit Do
End If
Loop
objIniFile.Close
Else
WScript.Echo strFilePath & " non esiste. Crearlo e riavviare lo script."
Wscript.Quit 1
End If
End Function

Set fso=Nothing
Set WshShell=Nothing
Set WshNetwork=Nothing
WScript.Echo "Operazione completata."&vbcrlf&f&" file copiati."
WScript.Quit

 

Facendo doppio clic sul file backup.vbs (che può essere rinominato come meglio si crede, lasciando però inalterata l'estensione .VBS), lo script inizierà col creare, nell'unità dalla quale è stato lanciato per esempio X:/Backup, una cartella col nome corrispondente a quello del sistema in uso nel nostro caso chiamata "HP-PC" (avendo nel config.inc la sezione questo nome [HP-PC]) ed al suo interno creerà due directory chiamate "Music" e "Personal" con all'interno lo stesso contenuto tutti i file/directory presenti nel vostro disco rigido e che avete voluto backuppare.

Al termine della procedura, lo script mostrerà un messaggio di cortesia che riporta, tra l'altro, il numero dei file copiati:

Backup tramite script VBS

Nel caso in cui tutti i file presenti nella directory sorgente dovessero avere la medesima data di modifica degli elementi conservati nell'unità di backup, verrebbe mostrato il messaggio seguente (0 file copiati):

Backup tramite script VBS

Lo script non sincronizza delle cartelle ma effettivamente fa una pura copia di file/directory, infatti se create nuovi file nella directory di destinazione (X:/Backup) tali file non verranno copiati in quella sorgente.

Qualora aveste dei dubbi sul funzionamento dello script, vi invitiamo a richiedere spiegazioni inviando un commento in calce a questo articolo.

Forse potrebbero interessarti anche questi articoli:

  1. Breve guida all’uso delle variabili d’ambiente in Windows
  2. Come farsi salutare dal PC dopo aver effettuato l’accesso a Windows
  3. FreeFileSync
  4. Mac OS X – Un omaggio nascosto a Steve Jobs in Mac OS X Lion
  5. AcidRIP [Linux DVD Ripper Software]

Potrebbero interessarti anche :

Ritornare alla prima pagina di Logo Paperblog

Possono interessarti anche questi articoli :