使用VBS下载文件

Arc*_*ath 20 vbscript

我有一个VBS脚本生成一个URL来从我的网络上的服务器下载文件.我现在需要将文件下载到"C:\ rWallpaper\wallpaper.png",URL存储在变量"url"中

我喜欢它在linux上像wget一样工作,只需下载并将文件保存到指定位置即可.

Ale*_* K. 41

您可以使用XMLHTTP下载并利用ADO流来编写二进制数据;

dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP")
dim bStrm: Set bStrm = createobject("Adodb.Stream")
xHttp.Open "GET", "http://example.com/someimage.png", False
xHttp.Send

with bStrm
    .type = 1 '//binary
    .open
    .write xHttp.responseBody
    .savetofile "c:\temp\someimage.png", 2 '//overwrite
end with
Run Code Online (Sandbox Code Playgroud)

  • @Racky在`.send`之后(如果服务器认为这样做)建议的文件名是在`filename =`令牌之后通过`hdr = xHttp.getResponseHeader("Content-Disposition")` (8认同)

Cha*_*ton 6

上面的回答Write to file failed. Code: 800A0BBC为我提出了错误,但这有效:

 HTTPDownload http://www.emagcloud.com/europeansealing/FSA_ESA_Compression_Packing_Technical_Manual_v3/pubData/source/images/pages/page10.jpg", "C:\"
Run Code Online (Sandbox Code Playgroud)

哪里

Sub HTTPDownload( myURL, myPath )
' This Sub downloads the FILE specified in myURL to the path specified in myPath.
'
' myURL must always end with a file name
' myPath may be a directory or a file name; in either case the directory must exist
'
' Written by Rob van der Woude
' http://www.robvanderwoude.com
'
' Based on a script found on the Thai Visa forum
' http://www.thaivisa.com/forum/index.php?showtopic=21832

    ' Standard housekeeping
    Dim i, objFile, objFSO, objHTTP, strFile, strMsg
    Const ForReading = 1, ForWriting = 2, ForAppending = 8

    ' Create a File System Object
    Set objFSO = CreateObject( "Scripting.FileSystemObject" )

    ' Check if the specified target file or folder exists,
    ' and build the fully qualified path of the target file
    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
        WScript.Echo "ERROR: Target folder not found."
        Exit Sub
    End If

    ' Create or open the target file
    Set objFile = objFSO.OpenTextFile( strFile, ForWriting, True )

    ' Create an HTTP object
    Set objHTTP = CreateObject( "WinHttp.WinHttpRequest.5.1" )

    ' Download the specified URL
    objHTTP.Open "GET", myURL, False
    objHTTP.Send

    ' Write the downloaded byte stream to the target file
    For i = 1 To LenB( objHTTP.ResponseBody )
        objFile.Write Chr( AscB( MidB( objHTTP.ResponseBody, i, 1 ) ) )
    Next

    ' Close the target file
    objFile.Close( )
End Sub
Run Code Online (Sandbox Code Playgroud)

  • 当文件大小很大时(例如400k pdf,我用20秒下载)你的方法非常慢,标记的答案只用了2秒就可以下载同一个文件. (2认同)

Eta*_*-47 6

除了 Alex K 的回答之外,如果对某人有帮助,我还使用了以下内容:

定义对象

Set objWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
Run Code Online (Sandbox Code Playgroud)

使用文件调用下载链接(在我们的案例中为图像)

URL = "https://www.grupya.com/public/assets/img/logo.png"
objWinHttp.open "GET", URL, False
objWinHttp.send ""
Run Code Online (Sandbox Code Playgroud)

将二进制数据保存到磁盘

SaveBinaryData "c:\temp\my.png",objWinHttp.responseBody
Run Code Online (Sandbox Code Playgroud)

SaveBinaryData 函数

Function SaveBinaryData(FileName, Data)

' adTypeText for binary = 1
Const adTypeText = 1
Const adSaveCreateOverWrite = 2

' Create Stream object
Dim BinaryStream
Set BinaryStream = CreateObject("ADODB.Stream")

' Specify stream type - we want To save Data/string data.
BinaryStream.Type = adTypeText

' Open the stream And write binary data To the object
BinaryStream.Open
BinaryStream.Write Data

' Save binary data To disk
BinaryStream.SaveToFile FileName, adSaveCreateOverWrite

End Function
Run Code Online (Sandbox Code Playgroud)