xargs -Iのようにコマンドの実行結果をパイプで次のコマンドに渡すBATファイル
これは、コマンドプロンプト(cmd.exe) Advent Calendar 2015 - Qiitaの12日目の記事です。
※Windows 10 Home 64bit 搭載のcmd.exeにて検証を行っています。
BATファイルを使って、ひとつ前のコマンドの実行結果を次のコマンドに1行ずつ渡します。
each.bat
@set COMMAND=%* @for /f "usebackq tokens=*" %%o in (`findstr .*`) do @( call %%COMMAND:?=%%o%% )
機能
eachの引数に与えたコマンドに渡され、そこに含まれる「?」が、前のコマンドの標準出力の1行の内容に置換されます。
使用例
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 /?」 - くんすとの備忘録
)に書いて〼
あると便利な、はず……筈。。