Windowsバッチ、苦手だから極力使いたくないンゴねぇ。それでも使わにゃいかん場面も稀によくある。まぁ泣き言いっても始まりゃしねえので、今の俺にできるのは、忘れないようにメモしておくだけじゃろう。
ある条件下で、ビルドされた成果物を使いまわしていろいろなチェックにかける必要がでてきたのだが、厄介なことに、出力されるバイナリのファイル名は毎回ランダムなものになる。共通しているのは拡張子だけ。しかも、デバッグ用とリリース用のバイナリが同時出力されるので、そのうちリリース用のみを拾い出さなければならない。
仮に、こんなファイルが吐き出されていたとする。
debug_0E8F227C.bin release_0E8F227C.bin
そいつの「release_0E8F227C.bin」だけを抜き出したい。ということで試行錯誤したらこうなった。
DIR /A-D /B | FINDSTR "\.bin$" | FINDSTR /V "debug" > tmp.txt SET /P BINPATH=<tmp.txt ECHO %BINPATH%
いちどファイルに書き出すという無駄な工程を踏んでるのがキモいけど、とりあえず動いた。
イカメモ。
・DIR
フォルダ内のファイルを一覧出力するやつ。Linuxでいうところのlsコマンド。
/A-D でディレクトリ以外を表示、かつ /B でファイル名のみ出力。
・FINDSTR
正規表現を使って、パイプで渡された文字列をフィルタリング。
今回は「ケツが.bin」かつ /V を付けて「debugを含まない」ようにしている。
・1>tmp.txt
STDOUT(標準出力)をファイルにリダイレクト。
・SET
/P をつけることによって、任意の文字列を変数に入力。今回はファイルから入力。