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」の時まで出力され、 以後は抜け出していることが確認できます。
PowerShell