可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Ive got a VBS Script that generates an url to download a file from a server on my network. I now need to download the file to "C:\rWallpaper\wallpaper.png", the URL is stored in the variable "url"
Id like it to work something like wget on linux, just download and save the file to a specified location.
回答1:
You can download using XMLHTTP and leverage an ADO stream to write the binary data;
dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP") dim bStrm: Set bStrm = createobject("Adodb.Stream") xHttp.Open "GET", "http://bla.com/xxx.png", False xHttp.Send with bStrm .type = 1 '//binary .open .write xHttp.responseBody .savetofile "c:\temp\xxx.png", 2 '//overwrite end with
回答2:
The above answer threw the error Write to file failed. Code: 800A0BBC for me, however this worked:
HTTPDownload http://www.emagcloud.com/europeansealing/FSA_ESA_Compression_Packing_Technical_Manual_v3/pubData/source/images/pages/page10.jpg", "C:\"
Where
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
回答3:
In addition to Alex K answer, I used the following if it helps someone :
Define object
Set objWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
Call Download link with a file ( image in our case )
URL = "https://www.grupya.com/public/assets/img/logo.png" objWinHttp.open "GET", URL, False objWinHttp.send ""
Save the Binary data to Disk
SaveBinaryData "c:\temp\my.png",objWinHttp.responseBody
SaveBinaryData Function
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
回答4:
This post is old, but the error in the fisrt code answer is that you need privileges to write at C:. Try at desktop or %temp%, it works.