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

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

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

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

Get-ChildItemコマンドレット

現在のWindowsで細かな条件を指定してファイルを検索したいときは、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

dirコマンド

dirコマンドは、Windows環境でフォルダーの内容を一覧表示するための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

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コマンド内で使用される@から始まる独自の変数があるなど、コマンドの使用方法に癖があるため、あまり利用されていない印象です。

あとがき

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