5

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): 名前、範囲、または選択基準に一致するオブジェクトまたはデータが、この操作の範囲内で見つかりませんでした。

4

4 に答える 4

4

あなたは正しい方向に進んでいます。

サーバーとの通信には、XMLHTTPRequestオブジェクトを使用する必要があります。これは、Windowsスクリプトの「カール」のようなものです。データがリモートサーバーから読み取られると、それをADODBストリームに書き込んで、スクリプト内で操作できます。あなたの場合、FileSystemObjectを使用してファイルに書き込むことは、最も論理的な行動のように思われます。

したがって、スクリプトは次のようになります。

' Set your settings
strFileURL = "http://www.domain.com/file.zip"
strSavePath = "C:\somefolder\"

' Send an HTTP request for the file
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")

objXMLHTTP.open "GET", strFileURL, false
objXMLHTTP.send()

' If the server responds with "OK"...
If objXMLHTTP.Status = 200 Then
    ' Create a stream object to write downloaded data to
    Set objADOStream = CreateObject("ADODB.Stream")
    objADOStream.Open
    objADOStream.Type = 1 'adTypeBinary

    objADOStream.Write objXMLHTTP.ResponseBody
    objADOStream.Position = 0

    ' Create an empty file on disk
    Set objFso = Createobject("Scripting.FileSystemObject")
    ' Make sure we don't have any name collision...
    If objFso.Fileexists(strSavePath) Then objFSO.DeleteFile strSavePath
    Set objFso = Nothing

    ' Write the stream data to file
    objADOStream.SaveToFile strSavePath
    objADOStream.Close
    Set objADOStream = Nothing
End if

Set objXMLHTTP = Nothing
于 2011-04-24T05:36:39.683 に答える
1

URL は次の形式である必要があります。

URL=scheme://server/folder
于 2011-02-09T09:51:59.617 に答える