2013-08-26 133 views
0

问题的核心:我试图使用VBScript下载650MB文件。超过500MB的任何文件失败,出现以下错误...命令行下载使用vbscript的大(500 + mb)文件

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

Source: msxml3.dll < - 使用WinHTTP的

我的时候 - 当使用MSXML.XMLHTTP或...

Source: WinHttp.WinHttpRequest <使用代码from here,包括MSXML.XMLHTTP和WinHTTP(不是wget)。我可以在任务管理器中看到的两个脚本都可以建立到超过650MB,然后由于上述错误而失败。脚本工作,如果我选择较小的文件下载发生就好了。

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

我发现了一些其他人有这个相同的问题,虽然似乎并没有大量的人试图用vbscript下载巨型文件......我无法想象为什么。我知道这不是一个空间问题(我有很多硬盘空间),或内存问题(我有4GB,物理内存显示高峰时约70%)。我也试着使用WinHTTP的(我连他们都设置为-1,无限超时)时设置一个定时器选项,详细here,并使用MSXML.ServerXMLHTTP允许一个定时器,以及尝试,既没有去

背景: 我正在尝试编写一个vbscript,以便为大量用户自动下载和安装一组软件。因为它将分发给很多人,所以我想在Windows中本地完成它,因为我不知道他们可能或不可能拥有的其他软件。这限制了我的选择。 PowerShell策略设置为受限制的,所以我不能在其他计算机上使用该策略,而不是不详细说明如何为其重新设置策略,这违反了应该为非技术用户完成所有任务的脚本的目的。这几乎留下了VBScript。

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

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

回答

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 
+0

对不起,我不得不把时间花在现在的另一个项目上,而没有时间去尝试。这确实看起来像我正在寻找的解决方案,但我接受这个答案。当我获得更多时间时,我会尽量记住回来并提供更多反馈。谢谢! – BeanBagKing

0

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

+0

我要下载的文件在HTTP服务器上,而不是在FTP上。是的,wget可以做到这一点,并且正如我注意到的那样,我可以使用它作为最后一个选项,但一旦脚本分发后,需要在终端用户计算机上进行另一次下载和安装,因为它本身不包含在Windows中(除非我错过了什么)。您链接的页面与我在第二段中链接的页面相同,我使用该站点上的第二个和第三个脚本。这两种工作对于我需要的文件(较小的文件)的2/3都很好,但在第三个较大的文件上失败。 – BeanBagKing

相关问题