0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

wget -i <file> を Powershell で実現する

Posted at

Windows環境で大量のファイルをダウンロードしたかったが、wget が使えなかったので即席で対処したメモ。

結論

ファイル file にダウンロードしたいURLのリストを書いておき、下記コマンドを実行すると、カレントディレクトリにファイル名のまま保存される。
なお、1行のみのファイルではうまく動かないはず。

Get-Content file | %{ Invoke-WebRequest $_ -OutFile ( Split-Path ( New-Object System.Uri($_) ).AbsolutePath -Leaf ) }

解説(というか備忘録)

Get-Content file

file から読み込んで、1行ずつのリスト(?)にして返す。
今回はパイプに渡しているので、次の %{ } に渡される。
なお、ファイルが1行のみの場合、行単位のリスト(長さ1のリスト)にはならず、
各文字で分断されてリスト化されるらしい?

%{ }

%{ }Foreach-Object { } のエイリアス。
リストの入力を受け付け、リストの各要素に対して、 { } 内の処理を行う。
{ } 内では、各要素は $_ で参照できる。(Perlみたい。)

Invoke-WebRequest

wget っぽいコマンドレット。というかエイリアスとして wget が登録されている。
-OutFile オプションが無いと、ファイルが保存されないっぽい。

Split-Path ( New-Object System.Uri($_) ).AbsolutePath -Leaf

URIからファイル名の部分を抽出している。
New-Object で.NETオブジェクト: System.Uri を作成して、
その AbsolutePath 属性を Split-Path に渡して、最後の要素を取得するとファイル名になっている・・・というカラクリのハズ。

参考にしました

感想

パイプでオブジェクトを渡せたり、関数?プロシージャ?が第一級オブジェクトのように見えたりと、
Powershellかなりアツイんじゃないかと思った。
ちゃんと勉強したい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?