2016-06-21 19 views
1

Ich schreibe ein Skript in VBS, das eine Datei von einem FTP-Server herunterlädt und die es verarbeitet. Ich habe dieses Bündel von Code, der richtig funktioniert:VBS ftp download Wartezeit

path = evidenceFolder 
On Error Resume Next 
Const copyType = 16 

Set oShell = CreateObject("Shell.Application") 
Set objFSO = CreateObject("Scripting.FileSystemObject") 

'FTP Wait Time in ms 
waitTime = 3000000 

strFTP = "ftp://" & FTPUser & ":" & FTPPass & "@" & FTPHost & FTPDir & FTPRoute 
Set objFTP = oShell.NameSpace(strFTP) 

'Download all files in folder 
If objFSO.FolderExists(path) Then 
    'Entire folder 
    Set objFolder = oShell.NameSpace(path) 
    objFolder.CopyHere objFTP.Items, copyType 
End If 
If Err.Number <> 0 Then 
    Wscript.Echo "Error: " & Err.Description & " - " & Err.Number 
End If 
'Wait for upload 
Wscript.Sleep waitTime 

Wenn ich nicht gesetzt die entsprechende Wartezeit-Verarbeitung der Dateien beginnt, bevor der Download abgeschlossen ist. Da ich große Dateien herunterladen muss, muss ich einen hohen Wert für die Wartezeit setzen. Wenn der Download nicht so groß ist, wartet er einfach zu lange.

Gibt es eine Möglichkeit, nur auf den Abschluss des Downloads zu warten, und nicht auf eine beliebige und konstante Zeit?

dank

Antwort

2

Schließlich schaffte ich es zu lösen, indem die Art und Weise zu tun, die FTP ändern. Ich habe Winscp heruntergeladen und es als Befehlszeilen-FTP-Client verwendet, da der Windows-Client den passiven Modus nicht akzeptiert und FW-Probleme erzeugt hat.

Const ForWriting = 2 
Set objFso = CreateObject("Scripting.FileSystemObject") 
Set sessionFile = objFso.OpenTextFile("session.txt", ForWriting, vbTrue) 
With sessionFile 
    .WriteLine "open ftp://user:[email protected]" 
    .WriteLine "cd " & FTPDir & FTPRoute 
    .WriteLine "get *.* " & destFolder & "\" 
    .WriteLine "exit" 
    .Close 
End With 
strFTP = "tools\winscp577\winscp.com /script=session.txt" 
Set WshShell = CreateObject("WScript.Shell") 
strFTP = WshShell.ExpandEnvironmentStrings(strFTP) 
WshShell.Run strFTP,, vbTrue 
objFso.DeleteFile "session.txt", vbTrue