Windowsでファイルの内容を検索(全文検索)する方法

Windowsでファイルの内容を検索(全文検索)する方法

Windows 11でファイルを検索する場合、ファイル名だけでなくファイルの内容を検索したい(全文検索したい)ときがあります。

そこでここでは、Windows 11でファイルの内容を検索する(全文検索する)方法を紹介します。

エクスプローラーからファイルの内容を検索する

Windows 11では、デフォルトでユーザーフォルダー(個人用フォルダー)にはインデックスが作成されており、インデックスが作成されているフォルダー内のファイルは、エクスプローラーなどからファイルの内容も検索できますが、ユーザーフォルダー(個人用フォルダー)以外の場所にあるファイル(インデックスが作成されていない場所にあるファイル)の内容を検索したいときは、以下のいずれかの対応が必要になります。

  • エクスプローラーで検索設定を変更する
  • ファイルの内容を検索したいフォルダーに対してインデックスを作成する

なお、ファイルの内容を検索できるファイル形式は、テキスト形式、Microsoft Office形式、PDF形式などに限られます。

検索設定を変更

検索設定を変更する場合は、まずエクスプローラーを起動し「表示」タブから「オプション」をクリックします。

Windowsでファイルの内容を検索(全文検索)する方法

「フォルダーオプション」画面が表示されるので「検索」タブの「ファイル名と内容を常に検索する(数分かかる場合があります)」にチェックを入れて「OK」をクリックします。

Windowsでファイルの内容を検索(全文検索)する方法

これで、ファイル名だけでなくファイルの内容も検索することができます。

ただし、この方法でファイルの内容を検索できるようにした場合、検索量が増えるためこれまでに比べて検索結果が表示されるまで時間がかかる場合があります。

インデックスを作成

もう一つの方法は、ユーザーフォルダーのように、検索したいフォルダーにあらかじめインデックスを作成しておく方法で、この方法ならファイルの内容も高速検索できるようになります。

インデックスには、ファイル名や作成日時、更新日時といったプロパティ情報やファイルの内容など情報が含まれており、インデックスがあればファイルの内容を高速に検索できます。

PC全体にインデックスを作成したいときは、以下の記事をご覧ください。

Windowsでパソコン内を高速検索するための設定方法
Windowsでパソコン内を高速検索するための設定方法
Windows 10や11の検索設定を調整して、パソコン内のフォルダーやファイルを高速に検索できるようにする方法を紹介します。

特定のフォルダーにのみインデックスを作成して、フォルダー内のファイルの内容を高速に検索できるようにしたいときは、Windowsの「設定」から「プライバシーとセキュリティ」>「Windows検索」を順に開き「関連設定」から「詳細インデックスオプション」をクリックします。

Windowsでファイルの内容を検索(全文検索)する方法

「インデックスのオプション」画面が開くので、画面下の「変更」をクリックします。

Windowsでファイルの内容を検索(全文検索)する方法

「インデックスが作成された場所」画面が表示されるので「選択された場所の変更」で、インデックスを作成したいフォルダーにチェックを入れ「OK」をクリックします。

ここでは、例として「D:\test」フォルダーを選択しています。

Windowsでファイルの内容を検索(全文検索)する方法

「インデックスのオプション」画面に戻ったら「インデックスを作成する対象」に、上で選択したフォルダーが表示されていることを確認して「閉じる」をクリックします。

Windowsでファイルの内容を検索(全文検索)する方法

以上で、新たにインデックスの作成対象にしたフォルダー内(ここでは「D:\test」フォルダー)を検索すると、ファイルの内容も高速検索できるようになります。

なお、大量のファイルが保存されているフォルダーに対してインデックスを作成した場合、インデックスの作成中はマシンに負荷がかかり、スペックの低いマシンでは、通常の操作に影響が出る場合があるので注意してください。

コマンド操作でファイルの内容を検索する

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

findstrコマンド

findstrコマンドの基本的な書式は次のとおりで、検索文字列には正規表現も使用できます。

> 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へ変換しておく必要があります。

参考:findstr | Microsoft Learn

Select-Stringコマンドレット

Select-Stringコマンドレットの基本的な書式は次のとおりで、検索文字列には正規表現も使用できます。

PS> Select-String -Path "検索対象のファイル" -Pattern "検索文字列"

たとえば、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

なお、Select-Stringコマンドレットでは、デフォルトで文字コードをUTF-8BOM付にしとかないと正しく検索できないため、検索するテキストファイルの文字コードをUTF-8BOM付にあらかじめ変換しておくか、「-Encoding」オプションで検索対象のテキストファイルの文字コードを指定する必要があります。

参考:Select-String (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Learn