前記事で単一のファイルを(PowerShellの)コマンドでダウンロードできるようになった。
今回は、これらのファイルを一括でダウンロードする方法を考える。
まずは欲しいファイル名を全て書いたファイルを作成する。今回は「list.txt」とした。
メモ帳で欲しいファイル名を(都度)書き換えればいいから実用性が高い。結局こういうアナログなのが一番役に立つ。
あとはこのlist.txtにあるファイル名を1行ずつ読み込んで、そのファイル名をダウンロードコマンドに流し込むループを書いてやればよい。
バッチファイルにした。
wget_ps_webclient.bat
内容はこれ。途中で PowerShell を呼び出す形。
REM ##### 処理開始 #####
@setlocal enabledelayedexpansion
@ECHO OFF
for /F %%i in ('type list.txt') do (
@echo %%i
set temp=%%i
cmd.exe /c "powershell.exe (new-object system.net.webclient).downloadfile('https://live.sysinternals.com/!temp!','!temp!')"
)
PAUSE
endlocal
<注意点>
① @setlocal enabledelayedexpansion と endlocal で囲むこと(遅延変数を有効にする)
② list.txt から読み込まれる1行データ(トークン)%%i を、ループ内で別の変数temp に格納すること(しないとバッチがエラー終了してしまう)
③ 変数temp は パーセント% ではなく ビックリマーク ! で囲むこと(遅延変数だから)
完成したら、wget_ps_webclient.bat をダブルクリックして実行してみる。
list.txt にあるファイルが次々とダウンロードされてくる。超便利。