Frage

Kennt jemand eine Methode, um zu bestimmen, wenn eine Dateikopie in VBScript abgeschlossen? Ich verwende den folgenden zu kopieren:

set sa = CreateObject("Shell.Application")  
set zip = sa.NameSpace(saveFile)  
set Fol = sa.NameSpace(folderToZip)  
zip.copyHere (Fol.items)
War es hilfreich?

Lösung

Do Until zip.Items.Count = Fol.Items.Count
    WScript.Sleep 300
Loop

Wenn die Schleife beendet Ihre Kopie beendet ist.

Aber wenn Sie kopieren möchten, und nicht zip, FSO oder WMI ist besser.

Wenn Sie zippen und wollen, dass sie in einer Datei haben Sie die Zip-Datei selbst, mit dem rechten Kopf zuerst zu erstellen. Else nur Sie komprimierte Dateien / Ordner IIRC erhalten. So etwas wie folgt aus:

Set FSO = CreateObject( "Scripting.FileSystemObject" )
Set File = FSO.OpenTextFile( saveFile, 2, True )
File.Write "PK" & Chr(5) & Chr(6) & String( 18, Chr(0) )
File.Close
Set File = Nothing
Set FSO = Nothing

Die 2 in Opentextfile ist ForWriting.

Andere Tipps

Sie können besser haben Glück die Copy-Methode auf einem FileSystemObject . Ich habe es für das Kopieren verwendet wird, und es ist ein blockierender Aufruf.

Const FOF_CREATEPROGRESSDLG = &H0&
Const ForReading = 1, ForWriting = 2, ForAppending = 8

Set fso = CreateObject("Scripting.FileSystemObject")

strSource = " " ' Source folder path of log files
strTarget = " .zip" ' backup path where file will be created

AddFilesToZip strSource,strTarget

Function AddFilesToZip (strSource,strTarget)
Set r=fso.GetFolder(strSource)
    set file = fso.opentextfile(strTarget,ForWriting,true) 
    file.write "PK" & chr(5) & chr(6) & string(18,chr(0)) 
    file.Close
    Set shl = CreateObject("Shell.Application")
    i = 0

        For each f in r.Files
            If fso.GetExtensionName(f) = "log" Or fso.GetExtensionName(f) = "Log" Or fso.GetExtensionName(f) = "LOG" Then
            shl.namespace(strTarget).copyhere(f.Path)', FOF_CREATEPROGRESSDLG   
                Do until shl.namespace(strTarget).items.count = i
                    wscript.sleep 300
                Loop
            End If
            i = i + 1
        Next

        set shl = Nothing
End Function
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top