Windowsでコマンド操作でファイルを検索する方法

Windowsでコマンド操作でファイルを検索する方法

Windows環境でコマンド操作でファイルを検索する場合、dirコマンドをはじめとしていくつかの方法で検索が可能です。

そこでここでは、Windows環境でファイルを検索できるコマンド、dir、forfiles、where、PowerShellのGet-ChildItemそれぞれを使ったファイル検索方法を解説します。

dirコマンドを使ったファイル検索

dirコマンドは、Windows環境でフォルダーの内容を一覧表示するためのコマンドで、ファイル名やファイルの属性をもとにファイルを検索することができます。

たとえば、D:¥testフォルダー以下の拡張子が「.txt」のファイルを検索したいときは、以下のようにコマンドを実行します。(ワイルドカードも使用できます。)

> dir /s D:\test\*.txt

また、dirコマンドとfor文を組み合わせれば、dirコマンドでファイルを検索し該当するファイルに対して処理を実行させることも可能です。

以下のコマンドでは、D:¥testフォルダー以下の拡張子が「.txt」のファイルを検索し、該当ファイルの内容を表示しています。

>for /f %i in ('dir /s /b f:\test\*.txt') do type %i

dirコマンドのオンラインヘルプは、以下の公式ページで確認できます。

dir | Microsoft Learn

forfileコマンドを使ったファイル検索

forfileコマンドは、ファイル名やファイルサイズ、ファイルの更新日時といった条件をもとにファイルを検索し、条件にマッチするファイルに対して処理を実行させることができます。

たとえば、forfileコマンドでD:¥testフォルダー以下の拡張子が「.txt」のファイルを一覧表示するには、次のようにコマンドを実行します。

> forfiles /P D:\test /S /M *.txt /C "cmd /c echo @file"

D:¥testフォルダー以下のサブフォルダーを一覧表示するには、次のようにコマンドを実行します。

> forfiles /P D:\test /S /M * /C "cmd /c if @isdir==TRUE echo @file"

カレントフォルダー以下で、1年以上更新されていないファイルを一覧表示するには、次のようにコマンドを実行します。

> forfiles /S /M *.* /D -365 /C "cmd /c echo @file"

カレントフォルダー以下で、ファイルの更新日時が2025年6月22日より古いファイルを一覧表示するには、次のようにコマンドを実行します。

> forfiles /S /M *.* /D -22/06/2025 /C "cmd /c echo @file"

このように便利なforfilesコマンドですが、forfilesコマンド内で使用する@から始まる変数があるなど、コマンドの使用方法に癖があるため、あまり利用されていない印象です。

forfilesコマンドのオンラインヘルプは、以下の公式ページで確認できます。

forfiles | Microsoft Learn

whereコマンドを使ったファイル検索

whereコマンドは、通常はカレントフォルダーと環境変数「PATH」に登録されているフォルダー内の実行ファイルを検索するコマンドですが、パスやファイル名、拡張子を指定すれば一般的なファイルの検索ツールとしても使用できます。

たとえば、D:¥testフォルダー以下の拡張子が「.txt」のファイルを検索するときは、次のようにコマンドを実行し、該当するファイルがあれば検索結果としてファイルのパスが表示されます。

> where /r D:\test\*.txt
D:\test\a.txt
D:\test\b.txt

whereコマンドに「/t」オプションを付けてを実行すると、検索結果にファイルのパスとともに、ファイルサイズと最終更新日時が表示でき、「/f」オプションを付けて実行すると、検索結果のパス名全体を引用符で囲めます。

>where /t /r D:\test\*.txt
40 2025/06/24 22:59:29 D:\test\a.txt
30 2025/06/24 22:59:38 D:\test\b.txt
>where /f /r D:\test\*.txt
"D:\test\a.txt"
"D:\test\b.txt"

また、whereコマンドでは、検索したいパスを「;」で区切って並べ、最後に「:」を付けて検索対象のファイル名を指定して実行することで、複数のフォルダーを対象に検索することもできます。

> where "<パス1>:<パス2>:<ファイル名のパターン>"

なお、whereコマンドもfor文を組み合わせれば、whereコマンドでファイルを検索し該当するファイルに対して処理を実行させることも可能です。

whereコマンドのオンラインヘルプは、以下の公式ページで確認できます。

where | Microsoft Learn

Get-ChildItemコマンドレットを使ったファイル検索

より細かな条件を指定してファイルを検索したいときは、PowerShellのGet-ChildItemコマンドレットがおすすめです。

Get-ChildItemコマンドレットを使ったファイル検索例は、次のとおりです。

たとえば、D:¥testフォルダー以下の拡張子が「.txt」のファイルを検索するときは、次のようにコマンドを実行します。

PS > Get-ChildItem -Recurse D:\test -Filter "*.txt"

また「-Directory」オプションを付けて実行すれば、フォルダーのみを検索でき、「-Exclude」オプションを指定すれば、特定のファイルを検索結果から除外するといったことができます。

ファイルの更新日時やファイルサイズと知ったプロパティ情報を条件に検索したいときは、Where-Objectコマンドレットを組み合わせて実行します。たとえば、30分以内に更新されたファイルを検索したいときは、以下のようにコマンドを実行します。

PS> Get-ChildItem -Recurse | Where-Object { $_.LastWriteTime -gt (Get-Date).AddMinutes(-30) }

検索したファイルに対して何らかの処理を実行したいときは、ForEach-Objectコマンドレットを組み合わせて使用します。たとえば、検索して見つかったファイルのフルパスを表示したいときは、以下のようにコマンドを実行します。

PS> Get-ChildItem -Recurse | ForEach-Object { Write-Output $_.FullName }

Get-ChildItemコマンドレットのオンラインヘルプは、以下の公式ページで確認できます。

Get-ChildItem (Microsoft.PowerShell.Management) - PowerShell | Microsoft Learn

あとがき

コマンドでファイルを検索する場合、たいていはPowerShellのGet-ChildItemコマンドレットで対応できますが、それ以外の検索方法も知っていれば、適材適所で使い分けることができるでしょう。