about_Continue
簡単な説明
continue
ステートメントがプログラム ループ、switch
ステートメント、または trap
ステートメントの先頭にプログラム フローを直ちに返す方法について説明します。
詳細な説明
continue
ステートメントは、現在の制御ブロックを終了し、完全に終了するのではなく、実行を続行する方法を提供します。 このステートメントはラベルをサポートしています。
ラベルは、スクリプト内のステートメントに割り当てる名前です。
ループでの続行の使用
ラベルのない continue
ステートメントは、 for
、 foreach
、 do
、または while
ステートメントによって制御される最も内側のループの先頭にプログラム フローを直ちに返します。 ループの現在のイテレーションが終了し、ループは次のイテレーションで続行されます。
次の例では、$ctr
変数が 5 の場合、プログラム フローは while
ループの先頭に戻ります。 その結果、5 を除く 1 ~ 10 のすべての数値が表示されます。
while ($ctr -lt 10)
{
$ctr += 1
if ($ctr -eq 5)
{
continue
}
Write-Host -Object $ctr
}
for
ループを使用すると、<Repeat>
ステートメントで実行が続行され、その後に<Condition>
テストが続きます。 次の例では、 $i
のデクリメントが continue
キーワードの後に発生するため、無限ループは発生しません。
# <Init> <Condition> <Repeat>
for ($i = 0; $i -lt 10; $i++)
{
Write-Host -Object $i
if ($i -eq 5)
{
continue
# Will not result in an infinite loop.
$i--
}
}
ラベル付きの Continue をループで使用する
ラベル付き continue
ステートメントは、イテレーションの実行を終了し、対象の外側のイテレーションまたは switch
ステートメント ラベルに制御を転送します。
次の例では、$condition
が True の場合、最も内側のfor
が終了しlabelB
で 2 番目のfor
ループが繰り返されます。
:labelA for ($i = 1; $i -le 10; $i++) {
:labelB for ($j = 1; $j -le 10; $j++) {
:labelC for ($k = 1; $k -le 10; $k++) {
if ($condition) {
continue labelB
} else {
$condition = Update-Condition
}
}
}
}
switch ステートメントで continue を使用する
switch
内のラベルのないcontinue
ステートメントは、現在のswitch
イテレーションの実行を終了し、コントロールをswitch
の先頭に転送して、次の入力項目を取得します。
1 つの入力項目がある場合continue
switch
ステートメント全体が終了します。
switch
入力がコレクションの場合、switch
はコレクションの各要素をテストします。 continue
は現在のイテレーションを終了し、switch
は次の要素で続行されます。
switch (1,2,3) {
2 { continue } # moves on to the next element, 3
default { $_ }
}
1
3
トラップ ステートメントで continue を使用する
本文で実行された最後のステートメント trap
ステートメントが continue
された場合、トラップされたエラーは警告なしに無視され、 trap
が発生した直後のステートメントで実行が続行されます。
ループ、スイッチ、またはトラップの外部で続行を使用しない
continue
を直接サポートするコンストラクト (ループ、switch
、trap
) の外部で使用すると、PowerShell は呼び出し履歴外側のコンストラクトを検索します。 外側のコンストラクトが見つからない場合、現在の実行空間は静かに終了します。
つまり、それをサポートする外側のコンストラクトの外部で誤って continue
を使用する関数とスクリプトは、誤って 呼び出し子を終了する可能性があります。
ForEach-Object
スクリプト ブロックなど、パイプライン内でcontinue
を使用すると、パイプラインが終了するだけでなく、実行空間全体が終了する可能性があります。
関連項目
PowerShell