ファイルの検索

にメンテナンス済み

コマンドプロンプトでは、ファイルを探す目的に応じて使うコマンドが変わります。

結論から言うと、ファイル名で探すなら 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(パスだけを表示する)を付けると、条件に合うファイルのフルパスが一覧で表示されます。

C:\work
dir /s /b "C:\work\*.pdf"
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>dir /s /b "C:\work\*.pdf"
C:\work\invoice.pdf
C:\work\2026\report.pdf
C:\work\2026\archive\manual.pdf
C:\users\user>

ファイル名の一部しか分からないときは、* を前後に付けます。

名前に
dir /s /b "C:\work\*report*"
dir の検索結果が見つからないとき

条件に合うファイルがない場合、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*"
*.htm が *.html にも一致することがある

拡張子が 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 は複数のパターンをスペース区切りで指定できるのが特徴です。

PDF
where /R "C:\work" *.pdf *.docx
PowerShell では where.exe と入力する

PowerShell では where が Where-Object のエイリアスになっているため、where.exe /R "C:\work" *.pdf のように拡張子を付けて実行してください。

where の詳しい使い方は

を参照してください。

ファイルの中身で検索する(findstr)

ファイル名ではなく「ファイルの中に書かれている文字列」から探したいときは、findstr を使います。

C:\work
cd /d "C:\work"
findstr /s /i /m "請求書" *.txt
オプション意味
/sカレントフォルダ(またはパスで指定したフォルダ)とそのサブフォルダを対象にする
/i大文字・小文字を区別しない
/m一致した行ではなく、ファイル名だけを表示する
/n一致した行の行番号も表示する

/m を外すと、一致した行の内容もあわせて表示されます。

- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>findstr /s /i /n "error" *.log
app.log:12:2026-11-01 10:23:45 ERROR connection failed
logs\old.log:304:error code: 500
C:\users\user>
おすすめ書籍※ 広告を含む場合があります
中小企業経営者のためのRPA入門 RPA導入を成功させる方法

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

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

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

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

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

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

Word・Excel・PDF の中身は検索できない

findstr が正しく検索できるのは、テキストファイル(.txt、.log、.csv、.bat、ソースコードなど)です。Word(.docx)や Excel(.xlsx)、PDF は内部が圧縮された形式や独自形式のため、中身の文字列は正しく見つかりません。

文字コードに注意

findstr は UTF-16 のファイルを検索できません。UTF-8 のファイルに含まれる日本語も、コンソールのコードページ(既定は 932)と一致しないと見つからないことがあります。日本語が見つからない場合は、ファイルの文字コードを確認してください。文字コードについては

で解説しています。

findstr の詳しい使い方は

を参照してください。

更新日時で絞り込んで探す(forfiles)

「30 日以上前に更新されたログファイル」のように、更新日時で絞り込みたいときは forfiles が便利です。

30
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 が使えます。

C:\work
@echo off
for /r "C:\work" %%f in (*.log) do (
    echo %%f
)

コマンドプロンプトに直接入力する場合は %%f ではなく %f と書きます。

for /f と dir を組み合わせると、dir のオプションで絞り込んだ結果を 1 件ずつ処理できます。

dir
@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 では検索できない

関連記事

練習問題

練習問題

C:\work 以下のサブフォルダを含め、拡張子が .csv のファイルのフルパスだけを一覧表示するにはどれでしょうか?

正しいものを 1 つ選んでください。

  1. dir "C:\work\*.csv"
  2. dir /s /b "C:\work\*.csv"
  3. findstr /s ".csv" "C:\work"

練習問題

カレントフォルダ以下のテキストファイルから、「error」を含むファイルの名前だけを大文字・小文字を区別せずに表示するにはどれでしょうか?

正しいものを 1 つ選んでください。

  1. dir /s /b error*.txt
  2. findstr /s /i /m "error" *.txt
  3. where /R . error
#コマンドプロンプト #バッチファイル #ファイル検索 #dir #findstr #where