Windows Script Host (jscript):如何下载二进制文件?
我正在尝试使用 Windows Script Host (JScript) 自动下载文件。我看到 ADODB.Stream 有一个 Open 方法,其文档使它看起来应该可以打开 HTTP URL 并流式传输响应正文:
var url = 'http://example.com/example.tar.gz';
var path = 'example.tar.gz';
var input = WScript.CreateObject('ADODB.Stream');
input.Open(url);
input.SaveToFile(path);
input.Close();
但它在 Open
调用上爆炸
(null ): 在此操作范围内未找到与名称、范围或选择条件匹配的对象或数据。
i'm trying to automate a file download with Windows Script Host (JScript). i see ADODB.Stream has an Open method whose documentation makes it seem like it should be possible to open a HTTP URL and stream the response body:
var url = 'http://example.com/example.tar.gz';
var path = 'example.tar.gz';
var input = WScript.CreateObject('ADODB.Stream');
input.Open(url);
input.SaveToFile(path);
input.Close();
But it bombs on the Open
call with
(null): Object or data matching the name, range, or selection criteria was not found within the scope of this operation.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这是 JScript 中的下载代码。还添加了一些 API 信息参考。
ADODB 流:
Scripting.FileSystemObject:
Here is the download code in JScript. Also added some references to API information.
ADODB Stream:
Scripting.FileSystemObject:
你走在正确的轨道上。
您应该使用 XMLHTTPRequest 对象与服务器进行通信。它有点像 Windows 脚本的“curl”。从远程服务器读取数据后,您可以将其写入 ADODB 流并在脚本中对其进行操作。就您而言,使用 FileSystemObject 写入文件似乎是最合乎逻辑的操作过程。
所以你的脚本可能看起来像这样:
You're on the right track.
You should be using the XMLHTTPRequest Object to communicate with the server. It's sort of like "curl" for Windows Script. Once the data is read from the remote server, you can write it into an ADODB stream and manipulate it within your script. In your case, writing to a file using the FileSystemObject seems like the most logical course of action.
So your script might look something like this:
将上面的代码转换为 JavaScript。这似乎对我有用。建议向调用者添加 try catch 块。另外,转换为异步。我使用此代码同时保存了大约 90 个文件。由于删除文件(覆盖失败时必需的)是同步的,因此最好将多个文件移至单独的函数。
Converted the above code to JavaScript. This appears to work for me. Recommend adding a try catch block to the caller. Also, converted to async. I've used this code to save some 90 files at the same time. Since the delete file (necessary as the overwrite fails) is synchronous, it is better moved to a separate function for multiple files.
您的 URL 需要采用以下格式:
Your URL needs to be in this format: