我正在VBS中编写一个脚本,从FTP服务器下载文件并对其进行处理。我有一堆正常工作的代码:
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
如果我没有设置相应的等待时间,则在下载完成之前开始处理文件。因为我必须下载大文件,我需要为等待时间设置一个高值。如果下载量不是很大,那就等待太久了。
有没有办法等待下载完成,而不是任意和恒定的时间?
谢谢
答案 0 :(得分:2)
最后,我设法通过改变FTP的方式来解决它。我已经下载了Winscp并将其用作命令行ftp客户端,因为Windows客户端不接受pasive模式并且正在生成FW问题。
Const ForWriting = 2
Set objFso = CreateObject("Scripting.FileSystemObject")
Set sessionFile = objFso.OpenTextFile("session.txt", ForWriting, vbTrue)
With sessionFile
.WriteLine "open ftp://user:pass@xx.xx.xx.xx"
.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