PowerShell: 特定の文字列を含むかどうかをif文でチェックする方法
PowerShellのifステートメントの条件式で、 特定の文字列を含むかどうかを調べて処理を分岐させたい場合、 ContainsメソッドかIndexOfメソッドを使います。 各メソッドの戻り値に応じて処理を分岐するように記述します。
Containsメソッドを使った方法
まずはContainsメソッドを使う方法です。
Containsメソッドは検索文字列が含む場合にTrue、
含まない場合にFalseを返します。
ですから戻り値をそのままif文の条件式に利用します。
if文とContainsを使った具体的なコードは次の通りです。 文字列を含む場合と、含まない場合で処理を分岐させています。
$str = "hijklmnopqrstu" $s = "kjm" if ($str.Contains($s)){ Write-Host "文字列を含む" } else { Write-Host "文字列を含まない" }
文字列を含まない時だけ処理を記述する場合は、 論理否定演算子「-!」を使って真偽を反転させます。
if (-! $str.Contains($s)){ Write-Host "文字列を含まない" }
IndexOfメソッドを使った方法
次はIndexOfメソッドを使う方法です。
IndexOfメソッドは検索文字列が見つかった位置を返し、
見つからなかった場合は-1を返します。
ですから戻り値が0以上の場合は文字列が含まれ、
それ以外の場合は含まれないことになります。
if文とIndexOfを使った具体的なコードは次の通りです。 先程と同じく、文字列を含むかどうかで処理を分岐しています。 条件式は比較演算子「-ge(以上)」を使って「戻り値 -ge 0」 としています。
$str = "hijklmnopqrstu" $s = "klm" if (($str.IndexOf($s) -ge 0)) { Write-Host "文字列を含む" } else { Write-Host "文字列を含まない" }
文字列を含まない場合だけ処理を記述する場合、 IndexOfメソッドの戻り値が「-1」なのを利用します。 比較演算子「-eq(等しい)」を使って「戻り値 -eq -1」 としています。
if (($str.IndexOf($s) -eq -1)) { Write-Host "文字列を含まない" }
IndexOfを使う場合、 条件式の書き方は複数ありますから、 自分がわかりやすいように書いてください。
(まとめ記事: PowerShell if文)