Di seguito riporto il codice sorgente di un piccolo programma scritto in vbscript che, mediante l'impiego di winrar, esegue il backup su una cartella (remota o locale).
WinRar è un ottimo compattatore che possiede una vasta gamma di opzioni a riga di comando. Questo ne consente l'utilizzo all'interno di un programma in grado di effettuare backup di tipo completo, incrementale, differenziale o giornaliero.
Lo script accetta due parametri al prompt dei comandi:
-C : effettua un backup completo
-D : elimina i files incrementali e completi precedenti. (valido solo se è stato specificato -C)
Prima di poter utilizzare il programma è necessario impostare correttamente alcune costanti all'interno del codice sorgente:
WORK_DIR (directory di lavoro)
DEST_DIR (directory di destinazione dei backup)
SUFF_COMPLETO (suffisso da dare al nome del file per i backup completi)
SUFF_GIORNALIERO (suffisso da dare al nome del file per i backup incrementali)
PASSWORD (password di criptazione)
Ricordo che è possibile modificare lo script a piacimento in accordo con quanto stabilito nella GPL.
'
'tR1 WinRar Backup
'Copyright (C) 2004-2005 vittorio benintende <vittorio@lucullo.it>
'This file is distributed under the GPL license
'
Option Explicit
Const WORK_DIR="c:\bkp"
Const DEST_DIR="\\151.92.106.42\kg00172$\backup"
const SUFF_COMPLETO="completo"
CONST SUFF_GIORNALIERO="giornaliero"
const PASSWORD="Daniele_e_1_Grosso"
const SUFF_EXT=".rar"
const ForReading=1
const ForWriting=2
Const ForAppending=8
Dim f, WshShell, FSO
Dim lngResult
Dim strWinRarCmd
Dim blCompleto, blDelete, lngPos
Dim WIN_RAR_CMD, WIN_RAR_CMD2
Dim objArgs
'argomenti
WIN_RAR_CMD = "c:\programmi\winrar\winrar.exe a -ac -ag -dh -hp" & PASSWORD & "
-inul -ibck -ilog" & WORK_DIR & "\backup.log -m5 -os -ow -r -t -ts " & DEST_DIR
& "\" & SUFF_COMPLETO & SUFF_EXT & " @c:\bkp\backup_list.txt"
WIN_RAR_CMD2= "c:\programmi\winrar\winrar.exe a -ac -ao -ag -dh -hp" & PASSWORD
& " -inul -ibck -ilog" & WORK_DIR & "\backup.log -m5 -os -ow -r -t -ts " &
DEST_DIR & "\" & SUFF_GIORNALIERO & SUFF_EXT & " @c:\bkp\backup_list.txt"
strWinRarCmd=WIN_RAR_CMD2
blDelete=FALSE
Set objArgs = WScript.Arguments
For lngPos = 0 to objArgs.Count - 1
Select Case UCase(objArgs(lngPos))
Case "-C"
strWinRarCmd=WIN_RAR_CMD
blCompleto=TRUE
case "-D"
blDelete=TRUE
End Select
Next
Set WshShell = WScript.CreateObject( "WScript.Shell" )
Set FSO = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(WORK_DIR & "\backup.log", ForAppending, True)
f.writeline "--------------------------------------------------"
'rinominiamo i files in caso di cancellazione
if blDelete and blCompleto Then
f.writeline "(" & Now & ") Renaming old files..."
lngResult=WshShell.Run ("cmd /c ren """ & DEST_DIR & "\" &
SUFF_COMPLETO & "*" & SUFF_EXT & """ """ & SUFF_COMPLETO & "*" & SUFF_EXT & "."
&
SUFF_COMPLETO & """" ,1,true)
If lngResult<>0 Then
f.writeline "(" & Now & ") error (" &
lngResult & ") renaiming files."
WScript.Quit (1)
End If
end if
f.writeline "(" & Now & ") [WinRAR] Starting command..."
f.writeline strWinRarCmd
f.close
'consentiamo a winrar di scrivere nel log
Set f = Nothing
lngResult=WshShell.Run (strWinRarCmd ,1,true)
Set f = fso.OpenTextFile(WORK_DIR & "\backup.log", ForAppending, True)
Select Case lngResult
Case 0
f.writeline "(" & Now & ") [WinRAR]
Done."
if blDelete and blCompleto then
f.writeline
"(" & Now & ") Deleting old files..."
lngResult=WshShell.Run
("cmd /c del """ & DEST_DIR & "\*" & SUFF_EXT & "." & SUFF_COMPLETO & """" ,1,true)
If lngResult<>0
Then
f.writeline "(" & Now & ") error (" & lngResult & ") deleting old files."
WScript.Quit (2)
End If
'giornaliero
lngResult=WshShell.Run
("cmd /c del """ & DEST_DIR & "\" & SUFF_GIORNALIERO & "*" & SUFF_EXT & """" ,1,true)
If lngResult<>0
Then
f.writeline "(" & Now & ") error (" & lngResult & ") deleting old files."
WScript.Quit (3)
End If
end if
Case 255
f.writeline "(" & Now & ") [WinRAR]
aborted by user."
Case Else
f.writeline vbcrlf & "(" & Now & ") [WinRAR]
error (" & lngResult & ")." 'aggiungo un ritorno a capo perché winrar non lo
mette.
End Select
'ESCI
f.close
Set f = Nothing
Set FSO=Nothing
Set WshShell=Nothing
Prima di mettere mano al codice consiglio di leggere attentamente la guida in linea di WinRar per riferimento. Quello che non subito salta all'occhio è che il compressore fa uso del parametro '@' per indirare un file di testo contenente i percorsi ed i files da includere nel backup. Nonostante sia possibile modificare la riga di comando da passare a WinRar, l'uso di questo parametro risulta molto utile. Di segiuto riporto un esempio del file in questione:
C:\Documents and Settings\utente\Documenti\*
C:\Documents and Settings\utente\Preferiti\*
C:\Documents and Settings\utente\Desktop\*
C:\Documents and Settings\administrator\Documenti\*
C:\Documents and Settings\administrator\Preferiti\*
C:\Documents and Settings\administrator\Visual Studio Projects\*
//C:\Documents and Settings\administrator\Desktop\*
C:\Inetpub\wwwroot\*
D:\downloads\*
L'utilizzo della riga di comando risulta utile se si intende eseguire i backup tramite il serivizio Task Scheduler di Windows. Ad esempio potremmo impostare un backup completo in un giorno qualunque della settimana e 6 incrementali nei seguenti.
cscript c:\bkp\tR1_backup.vbs -C -D
è un esempio di come sia possibile utilizzarlo dalla console del sistema operativo.
Nessun commento:
Posta un commento