コマンドでファイル名やファイル内容を検索する方法

コマンドでファイル名やファイル内容を検索する方法。

Windowsでファイルやファイルの内容を検索する場合、エクスプローラーから検索することもできますが、コマンド操作による検索もおすすめです。

そこでここでは、dirコマンドやforfilesコマンド、PowerShellのGet-ChildItemコマンドレット、Select-Stringコマンドレットを使って、ファイルやファイルの内容を検索(全文検索)する方法を解説します。

ファイルの検索方法

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」オプションを付けて実行します。

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

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

ファイル内容の検索(全文検索)方法

findstrコマンド

Windowsコマンドでテキストファイル内の文字列を検索するときは、findstrコマンドを使います。

たとえば、F:¥testフォルダー内のテキストファイルのうち、ファイルの内容に「aa」という文字列を含むファイルを検索したいときは、次のようにコマンドを実行します。

> findstr "aa" F:\test\*.txt

検索文字列に複数の条件を指定することもできます。

たとえば、文字列として「aa」と「bb」のいずれかを含むファイルを検索したいとき(OR検索)は、次のようにコマンドを実行します。

> findstr "aa bb" F:\test\*.txt

文字列として「aa」と「bb」の両方を含むファイルを検索したいとき(AND検索)は、次のようにコマンドを実行します。

> findstr /c:"aa bb" F:\test\*.txt

なお、findstrコマンドが検索できるのはシフトJISのテキストデータに限られるため、UTF-8などのテキストファイルの内容を検索したいときは、findstrコマンドに渡す前にシフトJISへ変換しておく必要があります。

Select-Stringコマンドレット

PowerShellでテキストファイル内の文字列を検索するときは、Select-Stringコマンドレットを使います。

findstrコマンドは文字コードとしてシフトJISにしか対応していないため、UTF8などのテキストデータを検索する場合には、Select-Stringコマンドレットの方が便利です。

たとえば、F:¥testフォルダー内のテキストファイルのうち、ファイルの内容に「aa」という文字列を含むファイルを検索したいときは、次のようにコマンドを実行します。

PS > Select-String -Path "F:\test\*.txt" -Pattern "aa"

コマンドの実行結果には、該当するファイル名、行番号、該当行の文字列が表示されます。

検索文字列に複数の条件を指定することもできます。

たとえば、文字列として「aa」と「bb」のいずれかを含むファイルを検索したいとき(OR検索)は、次のようにコマンドを実行します。

PS > Select-String -Path "F:\test\*.txt" -Pattern "aa","bb"

文字列として「aa」と「bb」の両方を含むファイルを検索したいとき(AND検索)は、次のようにコマンドを実行します。

PS > Select-String -Path "F:\test\*.txt" -Pattern "aa" | Select-String "bb"

文字列として「aa」を含まないファイルを検索したいとき(NOT検索)は、次のようにコマンドを実行します。

PS > Select-String -Path "F:\test\*.txt" -Pattern "aa" -NotMatch

Get-ChildItemコマンドレットと組み合わせれば、サブフォルダーのファイルを含めて検索できます。たとえば「E:\Test」フォルダーとサブフォルダー内の拡張子が「.txt」のファイルから「abc」というテキストを含むファイルを検索したい場合は、次のようにコマンドを実行します。

PS> Get-ChildItem E:\Test\ -Recurse -Filter *.txt | Select-String -Pattern abc

なお、Select-Stringコマンドレットは、既定では検索するテキストファイルの文字コードはUTF-8BOM付である必要があり、それ以外の文字コードの場合は「-Encoding」オプションで検索対象のテキストファイルの文字コードを指定する必要があります。

あとがき

ファイルやファイルの内容を検索する場合、コマンド操作ならさまざまな条件を指定して検索できて便利です。ご活用あれ。