命令行使用vbscript下载大(500 + mb)文件

时间:2013-08-26 13:55:53

标签: http vbscript download

问题的核心:我正在尝试使用VBScript下载650mb文件。超过500mb的任何文件都会失败并出现以下错误...

Error: Not enough storage is available to complete this operation Code: 8007000E

Source: msxml3.dll< - 使用MSXML.XMLHTTP或...

Source: WinHttp.WinHttpRequest< - 使用WinHTTP时

我正在使用代码from here,MSXML.XMLHTTP和WinHTTP(不是wget)。我可以在任务管理器中观看的两个脚本构建到650mb以上,然后因上述错误而失败。脚本工作,如果我选择较小的文件,下载就好了。

错误消息中引用的行都是.Write objHTTP.responseBody

我发现其他一些人有同样的问题,虽然似乎没有大量的人试图用vbscript下载巨型文件......我无法想象为什么。

我知道这不是空间问题(我有足够的硬盘空间),或内存问题(我有4GB,物理内存在峰值时显示约70%)。我还尝试使用WinHTTP将SetTimeouts选项设置为详细here(我甚至将它们全部设置为-1,无限超时),并尝试使用允许SetTimeouts的MSXML.ServerXMLHTTP,两者都是禁止的

背景: 我正在尝试编写一个vbscript来自动下载并为大量用户安装一套软件。因为它会分发给很多人,所以我想在Windows中本地使用它,因为我不知道他们可能会或可能没有的其他软件。这极大地限制了我的选择。 Powershell策略设置为限制,所以我不能在其他计算机上使用它,而不是详细说明如何为它们重置它,这违背了应该为非技术用户做所有事情的脚本的目的。这几乎留下了vbscript。

如果没有其他方法可以做到这一点,那么我的下一步可能是自动下载和安装较小的文件,如wget,然后使用它来下载较大的文件。尽管如此,我想用最少的原生软件来做这件事。看起来这应该是可行的,但我找不到解决方案。

编辑:我不能发布超过2个链接作为新用户,所以你只需要接受我的话,我发现其他人有这个问题,但他们的线程没有答案(这里或其他任何地方)。

2 个答案:

答案 0 :(得分:0)

在这里,我看到你使用了不支持ftp的HTTP。所以我的建议是使用Wget。 http://www.codeproject.com/Tips/506439/Downloading-files-with-VBScript

答案 1 :(得分:0)

我无法重现您的问题,因此我无法提供解决方案。但是,您可以通过以块为单位而不是整体下载文件来解决此问题:

chunksize = 524288000  '500 MB
url = "..."

Set stream = CreateObject("ADODB.Stream")
stream.Open
stream.Type = 1 'binary

i = 0
Do
  first = i * chunksize
  last  = first + chunksize - 1

  Set req = CreateObject("Msxml2.XMLHttp.6.0")
  req.open "GET", url, False
  req.setRequestHeader "Range", "bytes=" & first & "-" & last
  req.send

  If req.Status = 206 Then stream.Write req.responseBody

  i = i + 1
Loop Until CLng(req.getResponseHeader("Content-Length")) <> chunksize

stream.SaveToFile "C:\path\to\output.file", 2
stream.Close