2013-11-20 27 views
1

我用下面的VBScript來自動從我的網站下載的應用程序:古怪使用VBScript下載一些文件,無法完成

HTTPDownload "bleh.com/hello.exe", "C:\" 
HTTPDownload "bleh.com/hello1.dll", "C:\" 
HTTPDownload "bleh.com/hello2.dll", "C:\" 
HTTPDownload "bleh.com/hello3.dll", "C:\" 

Sub HTTPDownload(myURL, myPath) 
    Dim i, objFile, objFSO, objHTTP, strFile, strMsg 
    Const ForReading = 1, ForWriting = 2, ForAppending = 8 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    If objFSO.FolderExists(myPath) Then 
     strFile = objFSO.BuildPath(myPath, Mid(myURL, InStrRev(myURL, "/") + 1)) 
    ElseIf objFSO.FolderExists(Left(myPath, InStrRev(myPath, "\") - 1)) Then 
     strFile = myPath 
    Else 
     Exit Sub 
    End If 
    Set objFile = objFSO.OpenTextFile(strFile, ForWriting, True) 
    Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") 
    objHTTP.Open "GET", myURL, False 
    objHTTP.Send 
    For i = 1 To LenB(objHTTP.ResponseBody) 
     objFile.Write Chr(AscB(MidB(objHTTP.ResponseBody, i, 1))) 
    Next 
    objFile.Close() 
End Sub 

,當我運行該腳本,2/4文件下載充分。其他文件之一隻有2 KB(應該是大約180kb完整),另一個文件是0 KB(200kb完整)。

我再次在FTP服務器上檢查過,存儲文件的文件都是100%完整的,並且通過瀏覽器手動下載它們工作正常。

爲什麼我的腳本無法完全下載所有四個文件?

回答

0

嘗試與XMLHTTPRequest代替WinHttpRequest,並使用ADO stream用於保存(二進制)文件:

Sub HTTPDownload(url, path) 
    Set req = CreateObject("Msxml2.XMLHTTP.6.0") 
    req.open "GET", url, False 
    req.send 

    If req.Status = 200 Then 
    Set stream = CreateObject("ADODB.Stream") 
    stream.Open 
    stream.Type = 1 'binary 
    stream.Write req.responseBody 
    stream.SaveToFile path 
    stream.Close 
    Else 
    WScript.Echo req.status & " " & req.statusText 
    End If 
End Sub 

請求的狀態可以爲您提供有關問題的一些指針。同時檢查服務器日誌(如果可能)。

+0

我收到「寫入文件失敗。」在Windows 8中,當我嘗試。即使我是管理員,但它不是受保護的目錄。 – Juicy

+0

該文件是否已經存在?如果是這樣,您需要使用'stream.SaveToFile path,2'(請參閱[這裏](http://msdn.microsoft.com/en-us/library/ms676745(v = vs.85).aspx))。 –