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コマンドレットを使ったファイル検索例は、次のとおりです。

ファイル名に含まれる文字列で検索

たとえば、現在のフォルダー内でファイル名にtestが含まれるファイルを探したいときは、以下のようにコマンドを実行します。

PS> Get-ChildItem -Recurse -Filter '*test*'

ファイルサイズで検索

現在のフォルダー内からファイルサイズがが1KB未満のファイルを探したいときは、以下のようにコマンドを実行します。

PS> Get-ChildItem -Recurse | Where-Object Length -lt 1kb

ちなみに、ファイルサイズの単位としては、KB(キロバイト)・MB(メガバイト)・GB(ギガバイト)が使用でき、数値を比較できる演算子として以下が使えます。

演算子説明
-eq XXと等しい
-ne XXと等しくない
-gt XXより大きい
-ge XX以上
-lt XX未満
-le XX以下

ファイルの作成日時や更新日時で検索

たとえば、現在のフォルダー内から昨日作成されたファイルを探したいときは、以下のようにコマンドを実行します。

PS> Get-Childitem -Recurse | Where-Object {$_.CreationTime.Date -eq (Get-DAte).AddDays(-1).Date}

現在のフォルダー内から2026/6/13に作成されたファイルを探したいときは、以下のようにコマンドを実行します。

PS> Get-Childitem -Recurse | Where-Object {$_.CreationTime.Date -eq "2026/06/13"}

現在のフォルダー内から1時間以内に作成されたファイルを探したいときは、以下のようにコマンドを実行します。

PS> Get-Childitem -Recurse | Where-Object CreationTime -ge (Get-Date).AddHours(-1)

現在のフォルダー内から2026/6/5より前に作成されたファイルを探したいときは、以下のようにコマンドを実行します。

PS> Get-ChildItem -Recurse | Where-Object CreationTime -lt "2026/06/05"

現在のフォルダー内から昨日更新されたファイルを探したいときは、以下のようにコマンドを実行します。

PS> Get-Childitem -Recurse | Where-Object {$_.LastWriteDate -eq (Get-DAte).AddDays(-1).Date}

ファイルの属性で検索

たとえば、現在のフォルダー内から読み取り専用属性が付与されているファイルやフォルダーを探したいときは、以下のようにコマンドを実行します。

PS> Get-ChildItem -Recurse -Attributes ReadOnly

なお、一般的な属性(システム属性、読み取り専用属性、隠しファイル属性)については、専用のオプションを使って検索することもできます。

  • システム属性:-System
  • 読み取り専用属性:-ReadOnly
  • 隠しファイル属性:-Hidden

隠し属性が付与されているファイルを含めて検索したいときは、Get-ChildItemコマンドレットに「-Force」オプションを付けて実行します。

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

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

あとがき

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