web-dev-qa-db-ja.com

vbscriptからファイルをダウンロードしますか?

新しくインストールしたWindows XP +で実行でき、インターネットから指定したファイルをダウンロードできるスクリプトが必要です http://www.python.org/ftp/python/2.6.2/python-2.6.2.msi HTTP/FTPリクエストを手動で作成したり、wgetのようなサードパーティのプログラムを使用したりせずにそれを行う簡単な方法はありますか?私はWScript.CreateObject( "internetexplorer.application")が魔法をかけることを提案できますが、それに関するドキュメントは非常に巨大で、Googleはいつものように静かです:)。

5
grigoryvp

これを見つけた one 以下に貼り付けた。 cscriptを使用して実行し、スケジュールすることができます。

 '設定を行います
strFileURL = "http://www.domain.com/file.Zip" strHDLocation =" D:\ file.Zip " 'フェッチfile Set objXMLHTTP = CreateObject( "MSXML2.XMLHTTP") objXMLHTTP.open "GET"、strFileURL、false objXMLHTTP.send () If objXMLHTTP.Status = 200 Then Set objADOStream = CreateObject( "ADODB.Stream") objADOStream.Open objADOStream。 Type = 1 'adTypeBinary objADOStream.Write objXMLHTTP.ResponseBody objADOStream.Position = 0'ストリーム位置を開始に設定 セットobjFSO = Createobject( "Scripting.FileSystemObject") If objFSO.Fileexists(strHDLocation)Then objFSO.DeleteFile strHDLocation Set objFSO = Nothing objADOStream.SaveToFile strHDLocation objADOStream.Close Set objADOStream = Nothing End if Set obj XMLHTTP =なし
13
Maxwell

VBScriptは、このようなことを行う場合、協力的ではありません。この種のことは常に、正式にはスクリプトエンジンの一部ではないCOMサーバーを必要とします。

MSXML2.XMLHTTPを使用するというMaxwellの提案は、これを回避するクールな方法のようです。私は以前にそのトリックに出会ったことがなかったことを認めなければなりません。ファイルのダウンロードを実行するさまざまな商用COMサーバーもあります。

この種の問題は、VBScriptの多くをPowershellに移行しようとしている理由の1つです。 Powershellは.Netオブジェクトをシームレスに使用できるため、そのようなことを行うのははるかに簡単です。

JR

2
John Rennie

使用する方法

Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")

オブジェクトのバージョンはWindowsのバージョンとアップデート全体で大幅に変更されるため、残念ながら移植性は高くありません。

使用する

WScript.CreateObject("internetexplorer.application")

おそらくより良いですがエレガントではありません。

1
olivervbk

MSXML2.XMLHTTPは、古いWinInetを中心に構築されています。より信頼性の高いMsxml2.ServerXMLHTTPと呼ばれる新しいインターフェイスがあります。新しいMS WinHTTPスタック上に構築されています。 WinHTTPを直接呼び出すことをお勧めします。

MSXML2.XMLHTTPオブジェクトを作成する代わりに、CreateObject( "WinHttp.WinHttpRequest.5.1")を使用するだけです。コードの残りの部分は同じままです。

1
Vittaly