【バッチファイル】特定フォルダ配下のファイルを検索する

バッチファイルで特定フォルダ配下のファイルを検索する方法です。

特定フォルダの中だけ検索

特定のフォルダ内だけ検索するには次のように書きます。

@echo off

rem 対象ディレクトリに移動
pushd C:\Users\UserName\Desktop\Example

rem 全てのファイルを取得
dir /b

rem 完全一致するファイルを探す
dir /b example.txt

rem 前方一致するファイルを探す
dir /b example.*

rem 後方一致するファイルを探す
dir /b *.txt

rem 元のディレクトリに戻る
popd

子フォルダの中身も検索

子フォルダの中身も再帰的に検索する場合は/sを付けます。

@echo off

pushd C:\Users\UserName\Desktop\Example

rem 全ての子フォルダも含めて検索
dir /b /s

rem 検索条件を複数指定してもOK
dir /b /s *.txt * exe

popd

結果をファイルに保存

結果をファイルに保存するには>を使います。

@echo off

pushd C:\Users\UserName\Desktop\Example

rem ファイルに書き出す
dir /b /s > file.txt

popd

結果を編集したい場合はfor文を使う

結果を一つずつ取り出したい場合はforを使います。
一つずつ取り出せるので編集もできます。

@echo off

pushd C:\Users\UserName\Desktop\Example

rem %%aに.txtが入ってくる
for %%a in (*.txt) do (
  echo %%a
)

rem /rで子フォルダまで対象にする
for /r %%a in (*.txt) do (
  echo %%a
)

popd

for文の結果をファイルに保存

forで取り出した結果を保存するには>>を使います。

@echo off

pushd C:\Users\UserName\Desktop\Example

rem ファイルがあったら削除
if exist file.txt del file.txt

rem 書き込む
for /r %%a in (*.txt) do (
  echo %%a >> file.txt
  
  rem ファイル名だけにする場合はこんな感じ
  echo %%~na >> file.txt
)

popd

参考

worthliv.com

jj-blues.com

qiita.com

orangeclover.hatenablog.com