【问题标题】:Command line download large (500+mb) file using vbscript使用 vbscript 命令行下载大 (500+mb) 文件
【发布时间】:2016-06-09 20:12:19
【问题描述】:

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

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

Source: msxml3.dll

Source: WinHttp.WinHttpRequest

我正在使用代码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 个链接,所以你只需要相信我的话,我发现其他人有这个问题,但他们的线程没有答案(这里或其他任何地方)。

【问题讨论】:

    标签: http vbscript download


    【解决方案1】:

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

    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
    

    【讨论】:

    • 对不起,我现在不得不把时间集中在另一个项目上,没有时间尝试这个。这确实看起来正是我正在寻找的解决方案,所以我接受了这个答案。当我有更多时间时,我会尽量记住回来并提供更多反馈。谢谢!
    【解决方案2】:

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

    【讨论】:

    • 我正在下载的文件在 HTTP 服务器上,而不是在 FTP 上。是的,wget 可以两者兼得,正如我所指出的,我可以将其用作最后一个选项,但是一旦分发了脚本,就需要在最终用户计算机上再次下载并安装它,因为它本身并不包含在 Windows 中(除非我错过了什么)。您链接的页面与我在第二段中链接的页面相同,我在该站点上使用了第二和第三脚本。这两种方法都适用于我需要的 2/3 文件(较小的文件),但在第 3 个较大的文件中失败。
    猜你喜欢
    • 2012-06-13
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    相关资源
    最近更新 更多