首先澄清这个问题的目的是HTTP(s)下载 . 对于FTP,我可能会问(并回答)另一个问题 . 这是some similar questions - 但我希望更精确 .
除了排除外部工具,我希望解决方案适用于最广泛类型的Windows机器(包括仍然有足够大份额的XP,Win2003,Vista) . 另外,由于 WSH
是可能的选项之一,我不喜欢使用临时文件,所有内容都要打包在一个 .bat
文件中(jscript和vbscript都可以) .
什么是可能的方法 .
带有BITSADMIN的
-
"Pure"批处理解决方案 - 每个Windows机器上都有一个命令行实用程序 . 它不是很方便,但它是唯一一个不应该使用其他脚本语言的选项 .
-
使用WSH - 可能有三种方法 - WinHTTP,MSXML2.XMLHTTP,InternetExlorer.Application - 所有这些方法都是可访问的ActiveX对象,按我喜欢的顺序排列.WinHTTP和MSXML2.XMLHTTP的功能非常相似,但WinHTTP的声誉更稳定 . InternetExlorer.Application实际上只是可以通过ActiveX对象访问的Internet Explorer,而且一些UI元素是不可避免的(是吗?)所以我会跳过这个 .
-
使用.NET - 它's possible to create a hybrid batch file with all the three default .NET compilers (Jscript.net , VB.Net , C#) with Jscript.net there is no redundant error messages so I'我更喜欢它 . 如果我们忽略了一个已编译的.exe的事实,所有代码都在一个文件中,所以据我所知,这符合要求:-) . 使用.NET我们可以使用System .Net.WebClient或System.Net.HttpWebRequest(WebClient依赖它)或
System.Web.HttpRequest,但是现在我'll post only System.Net.WebClient solution.And even more same ActiveX objects accessible with WSH are available here too.So there are really many ways to dowanload a file with .Net.May be in the future I' ll更新了我的答案 . 无论如何,只有Webclient是专门为下载而设计的 . -
使用powershell - 与.NET具有相同的可能性,但在你可以遇到的所有机器上安装的机会较少 . 所以我也会跳过这个 .
1 回答
答案 . 所有脚本都应该使用
.bat
/.cmd
扩展名保存,并且可以直接用作批处理脚本 .1)Certutuil:
CertUtil命令可以被滥用来从Internet下载文件 . 默认情况下,自Windows Vista以来可以在Windows中使用 . 对于WinXP Server 2003管理工具是必需的 .
2) Bitsadmin :
最简单的方法来使用它
或者(如果要添加凭据,代理等,最终将需要此功能)
3) - WinHttp and WSH(SSL /证书和代理选项从未经过测试......) . Here是一个使用WinHttpRequest的即用型脚本 . 它可以执行所有的http请求,也可以用于下载文件(不是太大的文件) . 如果需要,还可以添加自己的身份验证标头 .
4) MSXML2.XMLHTTP and WSH (更好地使用WinHTTP)(SSL /证书和代理选项从未经过测试......)
5) .NET and webclient (这里没有SSL选项 . 请尝试添加它.Poxy选项从未经过测试)