【BAT】特定の文字列を含む(含まない)ファイル名を抽出して変数にぶちこむ

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 をつけることによって、任意の文字列を変数に入力。今回はファイルから入力。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)