2008-09-29 6 views
4

Est-ce que quelqu'un sait d'une méthode pour déterminer quand une copie de fichier se termine dans VBScript? J'utilise ce qui suit pour copier:Comment déterminer quand la copie se termine dans VBScript?

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

Répondre

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

Lorsque la boucle se termine, votre copie est terminée. Mais si vous voulez seulement copier et non zip, FSO ou WMI est meilleur.

Si vous zippez et que vous voulez les fichiers dans un fichier, vous devez créer le fichier zip vous-même, avec l'en-tête droit en premier. Sinon, vous obtenez uniquement des fichiers/dossiers compressés IIRC. Quelque chose comme ceci:

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 

Le 2 dans OpenTextFile est ForWriting.

+0

potentiellement pourrait être zippé, donc n'utilisant pas FSO – tloach

2

Vous avez sans doute plus de chance en utilisant la méthode de copie sur un FileSystemObject. Je l'ai utilisé pour copier, et c'est un appel bloquant.

0
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 
Questions connexes