about_Continue

簡単な説明

ステートメントが continue プログラムフロー、ステートメント、または trap ステートメントの switch 先頭にプログラムフローを直ちに返す方法について説明します。

長い説明

ステートメントは continue 、を完全に終了するのではなく、現在のコントロールブロックを終了し、実行を継続する方法を提供します。 ステートメントでは、ラベルがサポートされています。 ラベルは、スクリプト内のステートメントに割り当てる名前です。

Continue in ループの使用

ラベル continue が付けられていないステートメントは、、 do foreach 、、または while ステートメントによって for 制御される最も内側のループの一番上にプログラムフローを直ちに返します。 ループの現在の反復処理が終了し、ループは次の反復処理で続行されます。

次の例では、変数が5に等しい場合 $ctr 、プログラムフローがループの while 先頭に戻ります。 結果として、1から10までのすべての数値が表示されます (5 を除く)。

while ($ctr -lt 10)
{
    $ctr += 1
    if ($ctr -eq 5)
    {
        continue
    }

    Write-Host -Object $ctr
}

ループを使用 for すると、ステートメントで実行が続行 <Repeat> され、その後にテストが <Condition> 続きます。 次の例では、キーワードの後 continue にの $i デクリメントが発生するため、無限ループは発生しません。

#   <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 ステートメントのラベルに制御を転送します。

次の例では、が True の場合 $condition 、最も内側 for のが終了し、の2番目 for のループ labelB で反復処理が続行されます。

: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 を使用する

内のラベル continue 付けされていないステートメントは、現在 switch の反復の実行を終了し、 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

Trap ステートメントで continue を使用する

本体 trap で実行された最後のステートメントが continue の場合、トラップされたエラーは警告なしで無視され、実行が発生した trap ステートメントの直後にあるステートメントから実行が続行されます。

ループ、スイッチ、またはトラップの外側で [続行] を使用しない

を直接サポートするコンストラクト (ループ、 switchtrap ) の外部でを使用した場合 continue 、PowerShell は外側の構造体の 呼び出し履歴 を検索します。 外側のコンストラクトが見つからない場合、現在の実行空間は自動的に終了します。

これは、それをサポートする外側のコンストラクトの外部でを continue 使用する関数とスクリプトが誤って 呼び出し元 を終了する可能性があることを意味します。

パイプライン内でを使用する continueForEach-Object 、パイプラインが終了するだけでなく、実行空間全体が終了する可能性があります。

関連項目