PowerShell: ネストしたループを一気に抜け出す方法
PowerShellで入れ子にしたループを一気に抜け出す方法を紹介します。 単純なbreak文では内側のループを抜け出すだけですが、 ラベルを使うことで一気に外側のループを抜けることができます。
書式
:ラベル名 for (){ for () { if (条件式) {break ラベル名} } }
ラベルを付ける際は抜け出したいループの前に「:ラベル名」を記述します。 後は通常通りループをネストさせます。 抜け出す場合は「break ラベル名」と記述します。 これでラベルを付けたループを一気に抜け出すことができます。 単に「break」だと内側のループを抜け出すだけです。
上はforステートメントを例に出しましたが、 whileステートメントでも同じように記述します。 do-whileの場合はdoの前に記述します。
次のサンプルコードでは、ネストさせたループをラベルを使って一気に抜け出しています。
外側のループカウンタを$i、内側のループカウンタを$kとして
両方0から2までの間ループします。
そしてif文の条件式で「$iが1かつ$kが1」の時に
「break ラベル」でループを一気に抜け出しています。
:outloop for ($i = 0; $i -lt 3; $i++) { for ($k = 0; $k -lt 3; $k++) { Write-Host "$i - $k" if ($i -eq 1 -and $k -eq 1){ break outloop # 抜け出す } } } # 実行結果 0 - 0 0 - 1 0 - 2 1 - 0 1 - 1実行結果から「カウンタ変数$iが1かつ$kが1」の時まで出力され、 以後は抜け出していることが確認できます。