PowerShell を使用してファイルに特定の文字列が含まれているかどうかを確認する

John Wachira 2023年6月20日
  1. PowerShell で Select-String を使用して、ファイルに特定の文字列が含まれているかどうかを確認する
  2. PowerShell で Get-Content を使用して、ファイルに特定の文字列が含まれているかどうかを確認する
  3. PowerShell で Get-ChildItemSearch-String を使用して、ファイルに特定の文字列が含まれているかどうかを確認する
PowerShell を使用してファイルに特定の文字列が含まれているかどうかを確認する

この記事では、Windows PowerShell でテキスト ファイル内の文字列を検索するために使用できるさまざまな方法について説明します。

これを実現するために、Unix および Linux 環境で grep を使用できます。 PowerShell でこれに相当するのは、正規表現を使用してファイル内の文字列を検索する Select-String というコマンドレットです。

PowerShell で Select-String を使用して、ファイルに特定の文字列が含まれているかどうかを確認する

マシンに Demo.txt ファイルがあるとします。 PowerShell を使用してファイル内の文字列 Demonstration を見つけるにはどうすればよいでしょうか?

使用できる PowerShell スクリプトは次のとおりです。

Select-String -Path C:\Users\pc\Demo\Demo.txt -Pattern 'Demonstration'

上記のシェル スクリプトでは、Select-String はパターン Demonstration を使用して Demo.txt ファイル内の文字列を検索します。 Path パラメータでファイルへのフル パスを指定したことに注意してください。

ファイルに指定されたパターンが含まれている場合、コンソールはファイル名、行番号、および文字列を含む行を出力します。 出力は次のとおりです。

C:\Users\pc\Demo\Demo.txt:1:This purely for demonstration

上記の出力から、Demo.txt ファイルのフル パス、文字列を含む行、行 1、および文字列を含む行、つまり This is purely for demo が得られます。

ファイルに文字列が含まれているか含まれていないかだけを知りたい場合はどうすればよいでしょうか。

このような場合、以下に示すようなスクリプトを使用できます。

$Knw = Select-String -Path C:\Users\pc\Demo\Demo.txt -Pattern "Demonstration"

if ($Knw -ne $null)
{
    echo Contains String
}
else
{
    echo Does not Contain String
}

上記のシェル スクリプトでは、$Knw という文字列を定義し、それが $null と等しくないかどうかをチェックしています。 これは、ファイルに Demonstration というパターンが含まれているためです。

Contains 文字列を出力として取得する必要があります。

PowerShell で Get-Content を使用して、ファイルに特定の文字列が含まれているかどうかを確認する

Get-Content は、指定されたパスの内容をファイルにフェッチし、ファイルの内容を読み取って文字列オブジェクトを返すコマンドレットです。

Demo.txt ファイルで Get-Content を使用するには、以下に示すスクリプトを使用します。

Get-Content -Path C:\Users\pc\Demo\Demo.txt | Select-String -Pattern "Demonstration"

上記の PowerShell スクリプトでは、Get-Content は、Path パラメーターで指定された Demo.txt ファイルの内容をフェッチして読み取ります。 次に、ファイルの内容を Select-String コマンドに転送します。このコマンドは、Pattern パラメーターを使用して Demonstration 文字列を見つけます。

これにより、文字列を含む行が出力されます。

This purely for demonstration

文字列の存在のみを確認したい場合は、以下に示すスクリプトを使用できます。

If (Get-Content C:\Users\pc\Demo\Demo.txt | %{$_ -match "Demonstration"})
{
    echo Contains String
}
else
{
    echo Does not Contains String
}

ファイルには指定された文字列が含まれているため、出力として Contains String を取得する必要があります。

PowerShell で Get-ChildItemSearch-String を使用して、ファイルに特定の文字列が含まれているかどうかを確認する

50 を超えるテキスト ファイルのプールがあり、すべてのファイルで文字列を検索したい場合、どのようにすればよいでしょうか。

このようなシナリオでは、Get-ChildItemSearch-String コマンドレットを使用します。 Get-ChildItem コマンドレットは、検索条件に基づいて 1つ以上のファイルを検索します。

例を見てみましょう。

Demo フォルダーに 50 個以上のテキスト ファイルがあると仮定すると、これらのファイルで文字列 Demonstration を検索するにはどうすればよいでしょうか。

使用するスクリプトは次のとおりです。

Get-ChildItem -Path C:\Users\pc\Demo\ -Recurse | Select-String -Pattern 'Demonstration'

上記のスクリプトは、指定された Path パラメータで文字列 Demonstration を再帰的に検索します。 コンソールは、文字列を含むファイル名、行番号、および文字列を含む行を出力します。

出力は次のとおりです。

C:\Users\pc\Demo\Demo.txt:1:This purely for demonstration
C:\Users\pc\Demo\Insert.txt:1:We will use this demonstration for a test trial
C:\Users\pc\Demo\myfile.txt:1:This is a demonstration file for Get-ChildItem

そこにあります。

簡単に言うと、Windows PowerShell を使用して特定のファイル文字列を検索する場合は、Get-ChildItemGet-Content、および Search-String コマンドが便利です。 Select-String は、Unix の grep と Windows の findstr に相当します。

著者: John Wachira
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

関連記事 - PowerShell String