我先澄清一下,这个问题是针对HTTP(s)下载的。至于FTP,也许我会问另一个问题(并回答)。
这里有一些类似的问题 - 但我想更加精确。
除了排除外部工具之外,我希望解决方案适用于尽可能多类型的Windows机器(包括仍然占有相当大份额的XP、Win2003、Vista)。同时,由于WSH是可能的选项之一,我更喜欢不使用临时文件,并且将所有内容打包在一个单独的.bat文件中(这在jscript和vbscript中都是可能的)。
有哪些可能的方法呢?
这里有一些类似的问题 - 但我想更加精确。
除了排除外部工具之外,我希望解决方案适用于尽可能多类型的Windows机器(包括仍然占有相当大份额的XP、Win2003、Vista)。同时,由于WSH是可能的选项之一,我更喜欢不使用临时文件,并且将所有内容打包在一个单独的.bat文件中(这在jscript和vbscript中都是可能的)。
有哪些可能的方法呢?
- 使用BITSADMIN - 一个命令行实用程序,可在每台Windows计算机上使用的“纯”批处理解决方案。虽然不太方便,但在不应使用其他脚本语言的情况下,它是唯一的选择。
- 使用WSH - 有三种方法可行 - WinHTTP,MSXML2.XMLHTTP,InternetExlorer.Application - 它们都是可访问的ActiveX对象,按我喜欢的顺序排列。WinHTTP和MSXML2.XMLHTTP在功能上非常相似,但WinHTTP更稳定。InternetExlorer.Application实际上只是通过ActiveX对象访问Internet Explorer,并且一些UI元素是不可避免的(是吗?),所以我会跳过这个。
- 使用.NET - 可以使用所有三个默认的.NET编译器(Jscript.net,VB.Net,C#)创建混合批处理文件。对于Jscript.net而言,没有多余的错误消息,所以我会优先选择它。如果忽略已编译的.exe文件,所有代码都在一个文件中,因此根据我的要求,这很适合。使用.NET,我们可以使用System.Net.WebClient或System.Net.HttpWebRequest(WebClient依赖于它)或System.Web.HttpRequest,但现在我只会发布System.Net.WebClient解决方案。甚至更多与WSH可访问的相同ActiveX对象也可在此处使用。因此,有很多使用.NET下载文件的方法。也许将来我会更新我的答案。无论如何,只有Webclient专门设计用于下载。
- 使用powershell - 与.NET具有相同的功能,但安装机器上的机会较少。因此,我也会跳过这个。
bitsadmin
可以用来下载网页上的所有文件吗? - ArgyllWScript
区分大小写,-saveTo用作未命名参数,XMLHTTPObj
有时会拼错为WinHTTPObj
。 我还建议您使用WScript.ScriptName
来简化直接调用cscript。 - antonio(New-Object Net.WebClient).DownloadFile('Source, Dest')
。适用于 PowerShell v2,未经过 v1 测试。这是唯一一个可以在具有如此低版本的 PS 和 CMD 的操作系统上下载文件的脚本。 - John Kens/dynamic
开关。例如:bitsadmin /transfer myDownloadJob /dynamic /download /priority foreground https://github.com/microsoft/vscode-cpptools/releases/latest/download/cpptools-win32.vsix %USERPROFILE%\Downloads\cpptools-win32.vsix
- user2023370