【bat】複数のログファイルを一括で検索する方法(findstr /s)

サーバー運用やアプリのトラブル調査では、複数のログファイルにまたがって特定の文字列を検索したいことがよくあります。
バッチファイルでは findstr コマンドに /s オプションを付けることで、サブディレクトリを含めた一括検索が可能です。
本記事では、基本的な使い方から複数キーワード検索、結果をログに保存する方法までを紹介します。

基本:サブフォルダを含めて検索する

/s を付けると、指定フォルダ以下のすべてのファイルを対象に検索できます。

@echo off
rem C:\logs 以下のすべての .log ファイルから "ERROR" を検索
findstr /s "ERROR" C:\logs\*.log

出力には「ファイル名:一致行」が表示されます。

複数キーワードを同時に検索する

スペース区切りでキーワードを並べると、いずれかに一致する行が抽出されます。
複数行にまたがる検索はできない点に注意してください。

@echo off
rem "ERROR" または "FATAL" を検索
findstr /s "ERROR FATAL" C:\logs\*.log

正規表現を使った柔軟な検索

/r オプションを付けると正規表現検索が可能です。例えば「数字4桁」で始まる行を探す場合は次のようにします。

@echo off
findstr /s /r "^[0-9][0-9][0-9][0-9]" C:\logs\*.log

検索結果をファイルに保存する

調査結果を後で確認できるように、出力をログファイルにリダイレクトします。

@echo off
set "OUT=C:\result\error_result.txt"

findstr /s "ERROR" C:\logs\*.log > "%OUT%"
echo 検索完了: %OUT%

検索対象のファイル種類を指定する

ログファイル以外も混ざっている場合は、拡張子を限定しましょう。ワイルドカードを複数並べることで種類を絞れます。

@echo off
rem .log と .txt だけ対象
findstr /s "ERROR" C:\logs\*.log C:\logs\*.txt

応用:日付付きでログをまとめる

検索結果を日付付きファイルに保存すると、毎日の調査ログを残すことができます。

@echo off
set "DATESTR=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%"
set "OUT=C:\result\error_%DATESTR%.txt"

findstr /s "ERROR" C:\logs\*.log > "%OUT%"
echo 検索結果を %OUT% に保存しました

まとめ

バッチで複数ログファイルを一括検索するには、findstr /s を使うのが基本です。
さらに以下を組み合わせると便利です。

  • 複数キーワード → findstr "ERR FATAL WARN"
  • 正規表現 → findstr /r
  • 結果をファイル保存 → > result.txt
  • 日付を付与して世代管理

これらをテンプレート化しておけば、エラーログや監査ログの分析を効率的に行えるようになります。