【バッチファイル】特定の文字列を含むファイル名を変数に格納する方法

プログラマのメモ帳

この記事では、.bat(バッチファイル)で「特定の文字列を含むファイル名を変数に格納する方法」について紹介しています。

例えば、ファイル名に特定のパラメータ(日付や時間、特定のIDなど)を含んでいる場合にそのファイル名を検索して処理する時に使用できます。

今回は例として、日付(数値8ケタ)をパラメータとして持っている以下のようなファイル名を検索して変数に格納していきます。
“sample_20200614.txt”

また、実行するバッチファイルと検索するファイル名は同じディレクトリにあると仮定しています。(異なる場合はdirコマンドでパスを指定すれば大丈夫です。)

スポンサーリンク

Sample Code

@echo off
set PARAM=20200614

for /f "usebackq" %%A in (`dir /b ^| find "%PARAM%"`) do set FILE=%%A

echo %FILE%

サンプルとして変数<PARAM>に直接パラメータを格納しています。

ここで紹介すべき構文は2つです。

for /f "usebackq" %%<変数> in (処理やコマンド) do コマンド

バッチファイルでコマンド結果を変数に格納するお決まりの構文です。
forコマンドに「/f ”usebackq”」オプションを指定することで in ( )のコマンド結果を%%<変数> に格納することができます。

そして、%%<変数>に格納したコマンド結果をdo以下で<FILE>という変数に格納しています。

dir /b [ディレクトリ] | find "検索文字列"

dirコマンドに/dオプションを指定することでファイル名のみを取得します。
そして、その結果をパイプ「 | 」で繋いでfindコマンドで絞り込みをかけています。

一連のコマンドとして実行するために、バッククォートで囲むことと、キャレット「^」を使用してパイプ「|」をエスケープする必要があります。

実行結果を見てみると、ファイル名が取得できていることが分かります。

あとは、このファイル名を使ってコピー、移動、削除といったコマンドを使用すれば処理ができるでしょう。

以上です。
参考になればうれしいです。

コメント

タイトルとURLをコピーしました