ファイルの検索
コマンドプロンプトでは、ファイルを探す目的に応じて使うコマンドが変わります。
結論から言うと、ファイル名で探すなら dir /s /b、ファイルの中身で探すなら findstr /s /i /m を使います。
dir /s /b "C:\work\*.pdf"
cd /d "C:\work"
findstr /s /i /m "請求書" *.txt
検索方法の使い分け
| 探したいもの | 使うコマンド |
|---|---|
| ファイル名・拡張子から探す | dir /s /b |
| 複数のパターンをまとめて探す | where /R |
| ファイルの中の文字列から探す | findstr /s /i /m |
| 更新日時で絞り込んで探す | forfiles /D |
| 見つけたファイルをバッチで順に処理する | for /r |
ファイル名で検索する(dir /s /b)
dir コマンドに /s(サブフォルダも対象にする)と /b(パスだけを表示する)を付けると、条件に合うファイルのフルパスが一覧で表示されます。
dir /s /b "C:\work\*.pdf"
ファイル名の一部しか分からないときは、* を前後に付けます。
dir /s /b "C:\work\*report*"
条件に合うファイルがない場合、dir は「ファイルが見つかりません」と表示し、通常は終了コード(ERRORLEVEL)1 を返します。バッチファイルで見つかったかどうかを判定したいときに使えますが、dir ... | findstr のようにパイプでつなぐと、ERRORLEVEL は最後に実行された findstr のものになります。
フォルダだけを探す
/ad を付けると、フォルダ(ディレクトリ)だけが対象になります。
dir /s /b /ad "C:\work\*backup*"
ファイルだけを探す
/a-d を付けると、フォルダを除いてファイルだけが対象になります。
dir /s /b /a-d "C:\work\*report*"
拡張子が 3 文字のワイルドカード(*.htm など)は、8.3 形式の短い名前の影響で、拡張子が 4 文字以上のファイル(.html など)にも一致することがあります。厳密に区別したい場合は、結果を findstr で絞り込んでください(例: dir /s /b "C:\work\*.htm" | findstr /i "\.htm$")。詳しくは
を参照してください。
検索結果をさらに絞り込む
dir /s /b の結果をパイプで findstr に渡すと、パスに特定の文字列を含むものだけを残せます。
dir /s /b "C:\work\*.pdf" | findstr /i "2026"
ただし、この方法ではフォルダ名も判定の対象になります。ファイル名だけで絞り込みたい場合は、dir 側のワイルドカードで指定するのが確実です。
where /R で検索する
where /R は、指定したフォルダ以下を再帰的に検索し、見つかったファイルのフルパスを表示します。
where /R "C:\work" *.pdf
dir /s /b とほぼ同じ結果が得られます。where は複数のパターンをスペース区切りで指定できるのが特徴です。
where /R "C:\work" *.pdf *.docx
PowerShell では where が Where-Object のエイリアスになっているため、where.exe /R "C:\work" *.pdf のように拡張子を付けて実行してください。
where の詳しい使い方は
ファイルの中身で検索する(findstr)
ファイル名ではなく「ファイルの中に書かれている文字列」から探したいときは、findstr を使います。
cd /d "C:\work"
findstr /s /i /m "請求書" *.txt
| オプション | 意味 |
|---|---|
/s | カレントフォルダ(またはパスで指定したフォルダ)とそのサブフォルダを対象にする |
/i | 大文字・小文字を区別しない |
/m | 一致した行ではなく、ファイル名だけを表示する |
/n | 一致した行の行番号も表示する |
/m を外すと、一致した行の内容もあわせて表示されます。

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
findstr が正しく検索できるのは、テキストファイル(.txt、.log、.csv、.bat、ソースコードなど)です。Word(.docx)や Excel(.xlsx)、PDF は内部が圧縮された形式や独自形式のため、中身の文字列は正しく見つかりません。
findstr は UTF-16 のファイルを検索できません。UTF-8 のファイルに含まれる日本語も、コンソールのコードページ(既定は 932)と一致しないと見つからないことがあります。日本語が見つからない場合は、ファイルの文字コードを確認してください。文字コードについては
findstr の詳しい使い方は
更新日時で絞り込んで探す(forfiles)
「30 日以上前に更新されたログファイル」のように、更新日時で絞り込みたいときは forfiles が便利です。
forfiles /P "C:\work" /S /M *.log /D -30 /C "cmd /c echo @path"
/D -30 は「30 日前以前に更新されたもの」を意味します。@path は見つかったファイルのフルパスで、"C:\work\a.log" のように引用符付きで出力されます(ファイル名だけなら @file)。該当するファイルがない場合、forfiles はエラーメッセージを表示して終了コード 1 を返します。
詳しくは
を参照してください。検索結果をファイルに保存する
検索結果が多い場合は、リダイレクトでテキストファイルに保存すると確認しやすくなります。
dir /s /b "C:\work\*.pdf" > result.txt
保存した result.txt は、notepad result.txt で開けます。長い一覧は画面でスクロールするよりも、エディターで見るほうが読みやすくなります。
リダイレクトについては
を参照してください。バッチファイルで見つかったファイルを処理する
見つかったファイルに対して何か処理をしたい場合は、for /r が使えます。
@echo off
for /r "C:\work" %%f in (*.log) do (
echo %%f
)
コマンドプロンプトに直接入力する場合は %%f ではなく %f と書きます。
for /f と dir を組み合わせると、dir のオプションで絞り込んだ結果を 1 件ずつ処理できます。
@echo off
for /f "delims=" %%f in ('dir /s /b /a-d "C:\work\*report*" 2^>nul') do (
echo 見つかりました: %%f
)
delims= を空にしているのは、パスに空白が含まれていても 1 行をそのまま受け取るためです。2^>nul は、該当なしのときのエラーメッセージを表示しないための指定です。
explorer /select,"C:\work\2026\report.pdf" と実行すると、そのファイルが選択された状態でエクスプローラーが開きます。
まとめ
- ファイル名で探すなら
dir /s /b "フォルダ\パターン" - ファイルの中身で探すなら
findstr /s /i /m "文字列" パターン where /R フォルダ パターンでも、ファイル名の再帰検索ができる- 更新日時で絞り込むなら
forfiles /D - 検索結果は
> result.txtで保存でき、for /rやfor /fで 1 件ずつ処理できる - Word・Excel・PDF の中身は
findstrでは検索できない