min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

PowerShell を使って(コマンド操作で)大量のファイルを一括ダウンロードする

前記事で単一のファイルを(PowerShellの)コマンドでダウンロードできるようになった。

min117.hatenablog.com

今回は、これらのファイルを一括でダウンロードする方法を考える。

https://live.sysinternals.com

f:id:min117:20180502233135p:plain

1つ1つ右クリック保存なんてやってられない

まずは欲しいファイル名を全て書いたファイルを作成する。今回は「list.txt」とした。

f:id:min117:20180503000429p:plain

メモ帳で欲しいファイル名を(都度)書き換えればいいから実用性が高い。結局こういうアナログなのが一番役に立つ。

 

あとはこのlist.txtにあるファイル名を1行ずつ読み込んで、そのファイル名をダウンロードコマンドに流し込むループを書いてやればよい。

バッチファイルにした。

wget_ps_webclient.bat

f:id:min117:20180503000819p:plain

内容はこれ。途中で 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 をダブルクリックして実行してみる。

f:id:min117:20180503001607p:plain

list.txt にあるファイルが次々とダウンロードされてくる。超便利。