我需要一个可以在新安装的 Windows XP+ 上运行并从互联网下载指定文件的脚本,例如http://www.python.org/ftp/python/2.6.2/python-2.6.2.msi 有没有简单的方法可以做到这一点,而无需手动编写 HTTP/FTP 请求或使用第三方程序(如 wget)?我可以建议 WScript.CreateObject("internetexplorer.application") 可以发挥神奇的作用,但有关它的文档非常多,而 Google 一如既往地保持沉默 :)。
答案1
刚刚发现这个一粘贴在下面。您可以使用 cscript 运行它并将其安排在计划中。
'设置你的设置
strFileURL = "http://www.domain.com/file.zip" strHDLocation = “D:\file.zip” ' 获取文件 设置 objXMLHTTP = CreateObject("MSXML2.XMLHTTP") objXMLHTTP.open "GET", strFileURL, false objXMLHTTP.发送() 如果 objXMLHTTP.Status = 200 那么 设置 objADOStream = CreateObject("ADODB.Stream") 对象ADOStream.Open objADOStream.Type = 1 'adTypeBinary objADOStream.Write objXMLHTTP.ResponseBody objADOStream.Position = 0 '将流位置设置为开始 设置 objFSO = Createobject("Scripting.FileSystemObject") 如果 objFSO.Fileexists(strHDLocation) 则 objFSO.DeleteFile strHDLocation 设置 objFSO = Nothing objADOStream.SaveToFile strHDLocation 关闭ADOStream。 设置 objADOStream = Nothing 万一 设置 objXMLHTTP = Nothing
答案2
在执行此类操作时,VBScript 的不合作令人讨厌。这类操作总是需要 COM 服务器,而这些服务器并非脚本引擎的正式组成部分。
Maxwell 建议使用 MSXML2.XMLHTTP,这似乎是一个不错的解决方法。我必须承认,我以前没有遇到过这种技巧。还有各种商业 COM 服务器可以进行文件下载。
这类问题是我考虑将大部分 VBScript 转移到 Powershell 的原因之一。由于 Powershell 可以无缝使用 .Net 对象,因此做这些事情要容易得多。
JR
答案3
使用的方法
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
更为优雅,但不幸的是,由于对象的版本在 Windows 的版本和更新过程中发生了很大的变化,因此它的可移植性不是很好。
使用
WScript.CreateObject("internetexplorer.application")
可能更好,但不太优雅。
答案4
MSXML2.XMLHTTP 是基于旧版 WinInet 构建的。有一个名为 Msxml2.ServerXMLHTTP 的新接口,它更可靠。它基于较新的 MS WinHTTP 堆栈构建。我建议直接调用 WinHTTP。
只需使用 CreateObject("WinHttp.WinHttpRequest.5.1") 而不是创建 MSXML2.XMLHTTP 对象。其余代码保持不变。