Windowsでテキストファイルの内容をPowerShellで検索する方法

Windowsでテキストファイルの内容をPowerShellで検索する方法

Windows環境で、コマンド操作でテキストファイルの内容を検索したい場合、Windowsコマンドなら「fidstr」、PowerShellコマンドレットなら「select-string」が利用できます。

ですが、findstrコマンドは文字コードとしてS-JISにしか対応しておらず、最近利用することが多くなったUTF8などのテキストデータを検索する場合にはPowerShellのSelect-Stringコマンドレットの方が便利です。

そこでここでは、Windows 10を例にSelect-Stringコマンドレットを使って、テキストファイルの内容を検索する方法を紹介します。

Windows 10でファイルの内容を検索(全文検索)する方法
ここでは、Windows 10でファイル名だけでなくファイルの内容も検索対象に含める(全文検索する)方法を紹介します。

この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
Windows 10 Pro 64bit21H2

Select-Stringコマンドレットの使い方

Select-Stringコマンドレットの基本的な書式は次のとおりです。

PS> Select-String -Pattern <検索パターン> -Path <検索対象>

以降では、一般的な使用例をいくつか紹介します。

指定した文字列を含むファイルを検索する

たとえば「E:\Test」フォルダー内から「abc」という文字列を含むファイルを検索したい場合は、次のようにコマンドを実行します。

PS> Select-String -Pattern abc -Path E:\Test\*.*

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

Windowsでテキストファイルの内容をPowerShellで検索する方法

特定の拡張子のファイルを対象に検索する

拡張子が「.txt」のファイルのみを検索対象にしたい場合は、以下のようにコマンドを実行します。

PS> Select-String E:\Test\*.txt -Pattern abc

文字コードをシフトJISで検索する

検索パターンにシフトJISの日本語が含まれている場合は「-Encoding」オプションで「oem」を指定する必要があります。

Windowsでテキストファイルの内容をPowerShellで検索する方法

出力をコンパクトに表示する

Select-Stringコマンドレットの出力には、デフォルトで該当するファイル名、行番号、該当行の文字列が表示されますが、該当行の文字列が長い場合などでは、結果が見づらくなる時があります。

そのようなときは、Select-Objectコマンドレットを組み合わせることで、ファイル名だけや、ファイルのフルパスだけ表示させることができます。

PS > Select-String -Pattern abc -Path E:\Test\*.* | Select-Object Filename
PS > Select-String -Pattern abc -Path E:\Test\*.* | Select-Object Path

Windowsでテキストファイルの内容をPowerShellで検索する方法

サブフォルダーを含めて検索する

Select-Stringコマンドレットは、デフォルトで指定したフォルダー内しか検索できませんが、Get-ChildItemコマンドレットと組み合わせることで、サブフォルダーのファイルを含めて検索できます。

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

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

Windowsでテキストファイルの内容をPowerShellで検索する方法

指定した文字列を含まないファイルを検索する

Select-Stringコマンドレットでは「-NotMatch」オプションを使用することで、指定した文字列を含まないファイルを検索することもできます。

たとえば「E:\Test」フォルダー内から「abc」という文字列を含まないファイルを検索したい場合は、次のようにコマンドを実行します。

PS> Select-String E:\Test\*.* -Pattern abc -NotMatch

Windowsでテキストファイルの内容をPowerShellで検索する方法

大文字と小文字を区別して検索する

Select-Stringコマンドレットでは、デフォルトで既定では「-Pattern」オプションで指定する文字列の大文字と小文字は区別されませんが「-CaseSensitive」オプションを付けることで大文字と小文字を区別できます。

たとえば、以下のように実行すると、アルファベットの小文字で「abc」という文字列を含むファイルだけを検索できます。

PS> Select-String E:\Test\*.* -Pattern abc -CaseSensitive

あとがき

テキストファイルなどから特定の文字列を検索したい場合、メモ帳などのテキストエディターで開いてから、メモ帳の検索機能を使うという方法もありますが、コマンド操作に慣れているなら、上で紹介したSlect-Stringコマンドレットを使うことで、より効率よく検索できる場合が多々あるでしょう。

なお、Slect-Stringコマンドレットのより詳しい使い方を知りたい場合は、公式サイトのページが役立つでしょう。

Select-String (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Docs

ご活用あれ。