<package> <job id="DoneInVBS"> <?job error="true" debug="true" ?> <script language="VBScript"> Const IdNoLog = 0 Const IdNoEcho = 1 Const IdHelp = 2 Const IdDirOr = 3 Const IdDirDest= 4 Const IdDirLog = 5 ' *************************************** ' Costanti di Errore ' *************************************** Const NoErr = 0 Const ErrNoSource = 1 Const ErrParamDupl = 20 Const ErrDirCreate = 30 Public DirOr Public DirDest Public LogDir Public Nfiles Public NfilesCopied Public NfilesUnMod Public NfilesErr Public KDim Public fso Public NomeLogDayFile Public InizioLavori ' ********************************** ' Variabili relative agli argomenti ' ********************************** Public NoLog Public NoEcho Main Sub Main( ) ' ********************************************** ' VALORI DI DEFAULT: MODIFCARE SE NECESSARIO ' ********************************************** DirOr="c:\arch_def" DirDest="g:\arch_def" LogDir="c:\LOGDIR" ' ********************************************** Set fso = CreateObject("Scripting.FileSystemObject") InitVariabili() Parametri() NomeLogDayFile=GeneraNomeLogFile s= DuplicaStruttura(DirOr,DirDest, fso) s = ShowFolderList(DirOr,fso) Logga "****************************",1 Logga "* R E P O R T *",1 Logga "****************************",1 Logga "Directory Origine : " & DirOr, 1 Logga "Directory Detinazione: " & DirDest, 1 Logga "Inizio operazione : " & InizioLavori, 1 Logga "Fine operazione : " & OrarioDiAdesso, 1 Logga "Files analizzati : " + Cstr(NFiles),1 Logga "Files backuppati : " + Cstr(NFilesCopied),1 Logga "Files invariati : " + Cstr(NFilesUnMod),1 Logga "Errori rilevati : " + Cstr(NFilesErr),1 Logga "Bytes analizzati : " + FormatNumber(KDim,0)+" Bytes",1 KDim=KDim/(1024*1024) Logga "MegaByte analizzati : " + FormatNumber(KDim,2)+" Mb",1 End Sub Sub InitVariabili() TabStop = Chr(9) InizioLavori=OrarioDiAdesso NFiles=0 NFilesCopied=0 NFilesUnMod=0 NFilesErr=0 KDim = 0 End Sub Sub Parametri() Dim Argomento Dim t, c, i ,A NoLog=false NoEcho=false c=Chr(34) A= Array(0,0,0,0,0,0) Set objArgs = WScript.Arguments For I = 0 to objArgs.Count - 1 Argomento=TRIM(UCASE(objArgs(I))) IF (argomento="/NOLOG") THEN NoLog=True A(IdNoLog)=A(IdNoLog)+1 ElseIf (argomento="/NOECHO") Then NoEcho=True A(IdNoEcho)=A(IdNoEcho)+1 ElseIf ((argomento="/HELP") OR (argomento="/?")) Then t=t+"==============================================================================" +vbCrLf t=t+" H O S T S C R I P T D U P L I C A " +vbCrLf t=t+"==============================================================================" +vbCrLf t=t+"Ricopia il contenuto di una directory in maniera incrementale." +vbCrLf t=t+"Al tempo stesso scrive un dettagliato file di log delle operazioni compiute"+vbCrLf+vbCrLf t=t+"DUPLICA [/O:" & c & "Origine" & c & "] /D:" & c & "Destin." & c & " [/L:" & c & "LogDir" & c & "] [/NOECHO] [/NOLOG] [/HELP]"+vbCrlF t=t+"------------------------------------------------------------------------------"+vbCrLf t=t+"Origine Indica la directoy da copiare."+vbcrlf t=t+" Se omessa usa la directory corrente."+vbCrlf t=t+"Destin. Indica il percorso completo dove dove copiare l'origine"+vbCrlf t=t+"LogDir Indica la directory dove registrare il log"+vbCrlf t=t+" Se omessa usa la directory " & LogDir & vbCrlf t=t+"/NOECHO A video non verrĂ visualizzato alcun messaggio"+vbCrlf t=t+"/NOLOG Nessuna registrazione nel file di LOG"+vbCrlf t=t+"/HELP o /? Fornisce questo help"+vbCrlf+vbCrlf t=t+"I parametri Origine, Destinazione e LogDir necessitano di doppi apici"+vbCrLf t=t+"qualora il nome della directory contenga degli spazi."+vbCrLf t=t+"------------------------------------------------------------------------------" WScript.Echo t WScript.Quit ElseIf (Left(argomento,3)="/O:") Then DirOr=Mid(argomento,4) A(idDirOr)=A(idDirOr)+1 ElseIf (Left(argomento,3)="/D:") Then DirDest=Mid(argomento,4) A(IdDirDest)=A(IdDirDest)+1 ElseIf (Left(argomento,3)="/L:") Then LogDir=Mid(argomento,4) A(IdDirLog)=A(IdDirLog)+1 End if Next If (A(IdDirOr)> 1) Then WScript.Echo "Parametro /O: duplicato!" WScript.Quit ErrParamDupl+IdDirOr Elseif not fso.FolderExists(DirOr) Then WScript.Echo "Directory d'origine ",DirOr," non trovata!" WScript.Quit ErrNoSource End if If (A(IdDirDest)> 1) Then WScript.Echo "Parametro /D: duplicato!" WScript.Quit ErrParamDupl+IdDirDest Elseif Not CreaDirectory(DirDest,fso) Then WScript.Quit ErrDirCreater+IdDirDest End if If (A(IdDirLog)> 1) Then WScript.Echo "Parametro /L: duplicato!" WScript.Quit ErrParamDupl+IdDirLog Elseif Not CreaDirectory(LogDir,fso) Then WScript.Quit ErrDirCreater+IdDirLog End if End Sub Sub Logga(frase,Dove) Dim ts Const ForReading = 1, ForWriting = 2, ForAppending = 8 Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 If Not NoEcho Then WScript.Echo frase End If If NoLog Then Exit Sub ' *** LOG PRINCIPALE if dove=1 then Set ts = fso.OpenTextFile(LogDir+"\MAINLOG.LOG",ForAppending, true) ts.Writeline frase ts.Close elseif (dove=2) then Set ts = fso.OpenTextFile(LogDir+"\"+ NomeLogDayFile+".LOG",ForAppending, true) ts.Writeline frase ts.Close end if End Sub Function SonoUguali(fileOR, FileDest, fso) Dim fO, fD SonoUguali=false if (Not fso.FileExists(fileDest) ) then Exit Function end if Set fO = fso.GetFile(fileOR) Set fD = fso.GetFile(fileDest) fD.attributes = 0 ' SonoUguali=(fO.DateLastModified=fD.DateLastModified) ' per gestire il ritardo nella copia (3 secondi) SonoUguali=(fix(abs( (fO.DateLastModified-fD.DateLastModified)*86400)) < 3) End Function Function OrarioDiAdesso() Dim Ora Ora=FormatDateTime(Now,3) if Len(Ora)<>8 then Ora="0"+Ora end if OrarioDiAdesso=FormatDateTime(Now,2)+" - "+Ora End Function Function GeneraNomeLogFile() Dim tmp Dim Ora tmp=FormatDateTime(Now,2) tmp=right(tmp,4)+mid(tmp,4,2)+Left(tmp,2) Ora=FormatDateTime(Now,3) if Len(Ora)<>8 then Ora="0"+Ora end if GeneraNomeLogFile=tmp+Left(ora,2)+Mid(Ora,4,2)+Right(Ora,2) end Function Function CreaDirectory(NomeFolder, fso) On Error resume next If Not fso.FolderExists(NomeFolder) Then fso.CreateFolder(NomeFolder) If Not fso.FolderExists(NomeFolder) Then Logga "XXXX - Errore : Directory: " +NomeFolder + " non creata!", 2 ' WScript.echo "XXXX - Errore : Directory: " +NomeFolder + " non creata!" CreaDirectory=false Exit Function else Logga NomeFolder & " creata!", 2 end if End If CreaDirectory=true End function Function ShowFolderList(FolderOr, fso) Dim FolderDest, NomeFileOr, NomeFileDest Dim fdO, efO, edO, fiO Dim f, f1, fc, s, ef, fi FolderDest=DirDest+Mid(FolderOr,len(DirOr)+1) Set fdO = fso.GetFolder(FolderOr) set efO=fdO.Files On Error resume next if efO.count > 0 then For Each fiO in efO NomeFileOr=fso.BuildPath(FolderOr ,fiO.name ) NomeFileDest=fso.BuildPath(FolderDest, fiO.name ) if Not SonoUguali(NomeFileOr,NomeFileDest, fso) then if NomeFileOr<>".\lz.mdb" and instr(NomeFileOr,"NoBackup")=0 then fso.CopyFile NomeFileOr, NomeFileDest, true if Not SonoUguali(NomeFileOr,NomeFileDest, fso) then Logga "XXXX - Errore : " +NomeFileOr + " [#-> " + err.description+ " <-#]", 2 NFilesErr=NFilesErr+1 else Logga "Ho copiato : "+NomeFileOr, 2 NFilesCopied=NFilesCopied+1 end if end if else ' Logga "Invariato : "+NomeFileOr, 2 NFilesUnMod=NFilesUnMod+1 end if NFiles=NFiles+1 KDim=KDim+fiO.size next end if Set edO = fdO.SubFolders if edO.count>0 then For Each fdO in edO NomeDir=fso.BuildPath(FolderOr, fdO.name ) s = s & NomeDir& vbcrlf s=s & ShowFolderList(NomeDir, fso) Next end if ShowFolderList = s End Function ' ======================================================================================== ' = ' = Duplica la struttura delle directory senza copiare i file ' = ' ======================================================================================== Function DuplicaStruttura(ByVal folderOr,ByVal folderDest,ByRef fso) Dim f, f1, fc, s Dim NomeDirDest, NomeDirOr Set f = fso.GetFolder(folderOr) if ( CreaDirectory(folderDest,fso) ) then ' Logga folderDest & " creata!", 2 End If Set fc = f.SubFolders if (fc.count>0) then For Each f1 in fc NomeDirOr=fso.BuildPath(folderOr, f1.name ) NomeDirDest=fso.BuildPath(folderDest, f1.name ) s = s & NomeDirDest & vbcrlf s = s & DuplicaStruttura(NomeDirOr, NomeDirDest, fso) Next end if DuplicaStruttura = s End Function </script> </job> </package>