VBscript: Verificare che un file è stato completamente copiato/gestione dell’errore

Sto cercando di aggiungere qualcosa al mio script che mi permette di sapere se un file che io sono la copia è stata completamente copiato.

Fondamentalmente sono zippare un mucchio di file e inviarli a un’unità mappata sulla rete. Poi ho il mio script di eliminare il file nella posizione originale una volta che sono stati copiati correttamente. Lo script funziona perfettamente, ma ho solo bisogno di aggiungere qualche errore di gestione che mi permette di sapere se la copia non è stata completata.

Non l’ho mai usato la gestione degli errori in vbscript come io sono solo circa una settimana in questo modo che qualsiasi aiuto sarebbe molto apprezzato. Fammi sapere se ho bisogno di spiegare qualcosa di più in profondità. Il mio script possono essere trovate qui sotto:


Option Explicit


Dim sDirectoryPath, sDestinationPath, sOutputFilename, Shell, sFileExt, sFilePrefix

shell = WScript.CreateObject("WScript.Shell")

‘Specificare il Percorso della Directory dove il file zippato si trovano
‘Specifica destinazione per il file zip
‘Specificare il nome del file di estensione a cercare
‘Specificare il prefisso del nome del file per cercare

sDirectoryPath = "C:\Testscripts\"
sDestinationPath = "C:\Script\files\outzips\"
sOutputFilename = shell.ExpandEnvironmentStrings("%COMPUTERNAME%")
sFileExt = ".evtx"
sFilePrefix = "Archive*"


Dim Command, RetVal
Dim d : d = Date() 
Dim dateStr : dateStr = Year(d) & "-" & Right("00" & Month(d), 2) & "-" & Right("00" &   Day(d), 2)
Dim t : t = Time()
Dim timeStr: timeStr = Hour(t) & "-" & Right("00" & Minute(t), 2) & "-" & Right("00" & Second(t), 2)



Command = """C:\Program Files\7-zip\7z.exe"" a  " & sDestinationPath & sOutputFilename & "-" & dateStr & "-" & timeStr & ".zip " & sDirectoryPath & sFilePrefix & sFileExt


        RetVal = Shell.Run(Command,0,true)

Wscript.Sleep 2000



Dim objFso  

Set objFSO = CreateObject("Scripting.FileSystemObject")

‘Di copiare i file da un percorso ad un altro

objFSO.CopyFile "C:\script\files\outzips\*.zip" , "G:\CopyTestFolder\"

If err.Number <> 0 Then
WScript.Echo "An error occured copying this file, re-attempt copy"
Else
WScript.Echo "No errors occured, copy successful"
End If
On Error GoTo 0

‘Dopo che i file sono stati correttamente zip e copiato specificare dove per eliminare
‘vecchio file zip, e il locale archiviati percorso della cartella per eliminare

objFSO.DeleteFolder("C:\Script") 

‘Possibile eliminare tutta la cartella archiviati, o solo .i file zip nella cartella

objFSO.DeleteFile("C:\Testscripts\Archive*.evtx") 

‘Posizione in cui i file originali che devono essere eliminati dopo la copia è riuscita

Era la mia risposta sufficiente, o mi sono perso qualcosa?

OriginaleL’autore parchambeau | 2012-07-02

One Reply
  1. 1

    Utilizzare la ‘t’ di comando su 7-zip per verificare l’integrità. Se ‘0’ ok, altro errore.

    Per esempio:

    Set myshell = WScript.CreateObject("WScript.Shell")
    Dim cmd, result
    cmd = """C:\Program Files\7-zip\7z.exe"" t C:\NOT_a__valid_zip_file.zip"
    result = myshell.Run(cmd,0,true)
    Wscript.Echo "Not a valid zip file:  " & result
    
    cmd = """C:\Program Files\7-zip\7z.exe"" t C:\a_valid_zip_file.zip"
    result = myshell.Run(cmd,0,true)
    Wscript.Echo "A valid zip file:  " & result

    Di uscita:

    PS> cscript.exe .\7z.vbs
    Microsoft (R) Windows Script Host Version 5.8
    Copyright (C) Microsoft Corporation. All rights reserved.
    
    Not a valid zip file:  2
    A valid zip file:  0
    Scusate, sarò tornando allo script di domani, hanno avuto a che fare con alcuni problemi che si presentavano al lavoro. Ti ringrazio per la risposta e vedere come si lavora in uscita domani.
    Si potrebbe eventualmente eseguire di me attraverso la logica in questo? È questo a dire che se il primo comando è vero (cioè il file è il nome di qualcosa che non è valido) quindi restituisce l’wscript.echo “Non e’ un valido file zip:” e se il secondo cmd è vero quindi restituisce l’wscript.eco di “Un valido file zip” im solo un po ‘ perso su cui si sta facendo il se qui
    Inoltre, c’è comunque che ho potuto testare per vedere se funziona? Credo di avere un orribile mattina qui, ma io non riesco a pensare a un modo per ottenere lo script per l’esecuzione e la copia di qualcosa che potrebbe produrre l’errore
    L’esempio dimostra che è possibile distinguere tra un file “cattivo” (cioè il test di integrità restituisce “0”) e un file “buono” (cioè il test di integrità restituisce “0”). Hai detto che volevi essere in grado di dire se la copia è stata completata con successo. È possibile farlo eseguendo il test di integrità (‘7z.exe t <file>”) il file copiato. Se la copia è stata completata con successo (e il file era buona per cominciare), il test avrà restituito ‘0’, altrimenti, sai che c’era un problema (sia con il file, per cominciare, o nel processo di copia).
    Quanto riguarda il test di questo, ho semplicemente usato un file di testo (quindi non è un file zip), a dimostrazione del caso negativo. Si potrebbe anche creare un file zip, quindi utilizzare un editor esadecimale per munge. Tuttavia, penso che, semplicemente, prova con un non-zip file è sufficiente.

    OriginaleL’autore David

Lascia un commento