VBSによるファイルダウンローダーの実現

企業内のPCでは往々にして自由なソフトウェアのインストールが禁じられています。その結果、例えばダウンローダーが入れられないため、URLは分かっているファイルを一括ダウンロードする術が無いということがあります(手作業で右クリック⇒保存をしていると日が暮れる数のファイル)。そこで当ブログでは、Windows機であれば環境問わず実行可能なスクリプト(VBS)で簡易的なダウンローダーの作成を行いました。ファイルの大量ダウンロードとかいう新入社員にありがちな糞な仕事を任せられたら、これでちゃっちゃと終わらせてしまいましょう。

使い方
(1)以下のソースファイル(myDownloader.vbs)と同じ階層に、boxという名前のフォルダとmyDownloadList.txtを作成する。
(2)myDownloadList.txt内に、ダウンロードしたいファイルのURLを1行ごとに列挙する。
(3)myDownloader.vbs を実行。するとbox内にファイルがダウンロードされて溜まっていく。


やっつけで調べながら作ったので、ソースが汚いのはご容赦ください。
暇があれば関数化して見やすく改良します。誰かしてください。


myDownloader.vbs

Dim objFSO
Dim objFile

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If Err.Number = 0 Then
    Set objFile = objFSO.OpenTextFile("myDownloadList.txt")
    If Err.Number = 0 Then
        Do While objFile.AtEndOfStream <> True

        cReqURL = objFile.ReadLine
        Set objFileSystem = WScript.CreateObject("Scripting.FileSystemObject")
        Set objShell = WScript.CreateObject("WScript.Shell")
        Set objXmlHttp = WScript.CreateObject("MSXML2.XmlHttp")

        cFileName = objFileSystem.getFileName(cReqURL)
        cReqPath = objFileSystem.getParentFolderName(cReqURL) & "/"


        objXmlHttp.Open "GET", cReqPath & cFileName, False
        objXmlHttp.SetRequestHeader "Pragma", "no-cache"
        objXmlHttp.SetRequestHeader "Cache-Control", "no-cache"
        objXmlHttp.SetRequestHeader "If-Modified-Since", "Thu, 01 Jan 1970 00:00:00 GMT"
        objXmlHttp.Send

        intStatus = objXmlHttp.status

        If (intStatus <> 200) Then
            WScript.Echo "FAILED" & vbCrLf & vbCrLf & "HTTP status code is" & intStatus & vbCrLf & cFileName
            WScript.Quit
        End If

        Set objStream = WScript.CreateObject("ADODB.Stream")
        objStream.Open
        objStream.Type = 1
        objStream.Write objXmlHttp.responseBody
        objStream.SaveToFile objShell.CurrentDirectory & "\box\" & cFileName, 2

        objStream.Close

        Set objFileSystem = Nothing
        Set objStream = Nothing
        Set objXmlHttp = Nothing

        Loop
        objFile.Close
    Else
        WScript.Echo "File couldn't be opened: " & Err.Description
    End If
Else
    WScript.Echo "Error: " & Err.Description
End If

Set objFile = Nothing
Set objFSO = Nothing

WScript.Echo "Successfully done."
WScript.Quit
(ご利用条件)当ブログは筆者の個人的見解を述べたものであり、筆者の所属する団体またはその公式見解とは一切関係がありません。当ブログは特定の金融商品の売買を推奨または勧誘またはあっせんするものではありません。当ブログにおいて情報提供の対価として閲覧者から金銭を徴収することはありません。当ブログの内容の正確性に関しては万全を期していますが、筆者は何らその保証を行うものではありません。投資は自己責任です。当ブログの内容をもとにして生じた損害について、筆者は一切の責任を負いません。