これは、コマンドプロンプト(cmd.exe) Advent Calendar 2015 - Qiitaの12日目の記事です。※Windows 10 Home 64bit 搭載のcmd.exeにて検証を行っています。BATファイルを使って、ひとつ前のコマンドの実行結果を次のコマンドに1行ずつ渡します。

each.bat

1
2
3
4
5
@set COMMAND=%*
@for /f "usebackq tokens=*" %%o in (`findstr .*`) do @(
	call %%COMMAND:?=%%o%%
)

機能

eachの引数に与えたコマンドに渡され、そこに含まれる「?」が、前のコマンドの標準出力の1行の内容に置換されます。

使用例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
C:\test>dir /b
aaa
bbb
ccc
each.BAT

C:\test>dir /b | each echo ? --- ?.hogehoge
aaa --- aaa.hogehoge
bbb --- bbb.hogehoge
ccc --- ccc.hogehoge
each.BAT --- each.BAT.hogehoge

簡単な解説

標準入力の内容を「findstr .*」で抜き出して、環境変数の置換機能を使って置換しながら実行します。※環境変数の置換についてはこの前のset /?の記事(コマンドプロンプトで読んでおくべき7つのHELP - その⑤「set /?」 - くんすとの備忘録
)に書いて〼

あると便利な、はず……筈。。