Daily chess puzzle

Play chess online

my little experience in Information Tecnology.

28 febbraio 2006

tR1 WinRar Backup (vbscript)

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: