Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vbscript 使用VBS下载文件_Vbscript - Fatal编程技术网

Vbscript 使用VBS下载文件

Vbscript 使用VBS下载文件,vbscript,Vbscript,我有一个VBS脚本,生成一个url,从我网络上的服务器下载文件。我现在需要将文件下载到“C:\rWallpaper\wallper.png”,URL存储在变量“URL”中 我希望它能像linux上的wget一样工作,只需下载并将文件保存到指定位置。您可以使用XMLHTTP下载并利用ADO流写入二进制数据 dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP") dim bStrm: Set bStrm = createobject("Ado

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


我希望它能像linux上的wget一样工作,只需下载并将文件保存到指定位置。

您可以使用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

上面的回答引发错误
写入文件失败。代码:800A0BBC对我来说,但这是可行的:

在哪里


这篇文章很旧,但第一个代码答案中的错误是,你需要特权才能在
C:\
、在桌面或
%temp%
上写,它可以工作。

除了Alex K answer之外,如果对某人有帮助,我还使用了以下选项:

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
定义对象

Set objWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "https://www.grupya.com/public/assets/img/logo.png"
objWinHttp.open "GET", URL, False
objWinHttp.send ""
调用带有文件的下载链接(本例中为图像)

URL = "https://www.grupya.com/public/assets/img/logo.png"
objWinHttp.open "GET", URL, False
objWinHttp.send ""
将二进制数据保存到磁盘

URL = "https://www.grupya.com/public/assets/img/logo.png"
objWinHttp.open "GET", URL, False
objWinHttp.send ""
SaveBinaryData "c:\temp\my.png",objWinHttp.responseBody
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
尝试:


我发现映射驱动器是一种很好的方法

   dim Z
   Z = "http:// .... " '(base url)
   Set FSO = CreateObject("Scripting.Filesystemobject")
    Set objNetwork = CreateObject("WScript.Network") 
    '## This is for network drives
    
    If FSO.driveExists ("Z:") then 
        objNetwork.RemoveNetworkDrive "Z:", True, True
    End If      

    '## for adding
    'Set objNetwork = CreateObject("WScript.Network")
    objNetwork.MapNetworkDrive "Z:" , Z
从那里,您可以定义文件的url的其余部分

SourceFileName = "Z:\" & ...
和目标文件名

DestinFileName = "..."
然后你可以用

 FSO.CopyFile SourceFileName, DestinFileName, True

这很有效,对我帮助很大,但您必须指定目标名称。问题是,如果您想使用服务器建议的原始文件名。@Racky after
。send
(如果服务器认为这样做),建议的文件名在
文件名=
令牌之后,可通过
hdr=xHttp.getResponseHeader(“内容处置”)获得
谢谢,效果很好-我刚刚把它包装成一个函数,最后一个是badabing badaboomAt!这段代码同时适用于
http
https
,与我在stackoverflow中检查过的其他3个“解决方案”并排使用,它们不适用于
https
。你应该得到一枚奖章如果接受的答案因该特定错误而失败,则问题是写入文件夹的权限,这并不难解决。你是对的,我使用提供的代码解决了问题。当文件大小较大时,你的方法非常慢(例如,400k pdf,我用20秒下载)标记的答案只需要2秒就可以下载同一个文件。我正在尝试下载一个png文件。它创建了一个新文件,但是png文件不是不完整就是没有图像。虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来为读者回答这个问题,而这些人可能不知道您的代码建议的原因。这将要求在目标计算机上安装curl,这在大多数windows计算机上是不正确的。