バッチファイルでファイルを検索したりテキストを処理するには where・find・findstr が活躍します。それぞれの違いと使いどころを解説します。
whereコマンド:コマンドやファイルの場所を探す
where はコマンドの実行ファイルがどこにあるかを表示します。LinuxのWhich コマンドに相当します。
@echo off
rem コマンドの場所を確認
where python
where git
where notepad
rem 存在確認(エラーを捨てて終了コードだけ使う)
where python >nul 2>&1
if %errorlevel% equ 0 (
echo Pythonがインストールされています
) else (
echo Pythonが見つかりません
)
rem フォルダ内のファイル検索(ワイルドカード対応)
where /r C:\work *.txt
where /r C:\logs *.logfindコマンド:テキストの行を検索する
find はファイルや入力から指定した文字列を含む行を検索します。大文字小文字を区別する点に注意です。
@echo off
rem ファイルから文字列を検索
find "ERROR" C:\logs\app.log
rem 行番号も表示
find /n "ERROR" C:\logs\app.log
rem 含まない行を表示(/V で反転)
find /v "DEBUG" C:\logs\app.log
rem コマンドの出力をパイプで渡す
type C:\logs\app.log | find "ERROR"
rem エラー行の数だけカウント
find /c "ERROR" C:\logs\app.logfindstrコマンド:正規表現で高度な検索
findstrはfindの強化版で、正規表現・複数ファイル・再帰検索に対応しています。
@echo off
rem 基本的な文字列検索(大文字小文字を区別しない /i)
findstr /i "error" C:\logs\app.log
rem 複数のキーワードをOR検索
findstr /i "error warning" C:\logs\app.log
rem 正規表現を使った検索(/r)
findstr /r "^[0-9]" C:\logs\app.log
rem サブフォルダも含めて再帰検索(/s)
findstr /s /i "TODO" C:\work\*.bat
rem 行番号も表示(/n)
findstr /n "ERROR" C:\logs\app.log
rem 検索結果をfor /fで処理
for /f "delims=" %%a in ('findstr /i "error" C:\logs\app.log') do (
echo エラー検出: %%a
)find vs findstr 使い分け
| 機能 | find | findstr |
|---|---|---|
| 単純な文字列検索 | ○(シンプルで速い) | ○ |
| 大文字小文字無視 | × | ○(/i) |
| 正規表現 | × | ○(/r) |
| 複数パターンOR検索 | × | ○(スペース区切り) |
| 再帰検索 | × | ○(/s) |
まとめ
- whereでコマンドの場所を確認したりインストール確認ができる
- findは単純なテキスト検索に使う(大文字小文字を区別する)
- findstrは正規表現・大文字小文字無視・再帰検索など高度な検索ができる



コメント