共用方式為


關於_繼續

簡短描述

描述 continue 語句如何立即將程式流程傳回至程序循環頂端、switch 語句或 trap 語句。

完整描述

continue 語句提供一種方式來結束目前的控制區塊,但繼續執行,而不是完全結束。 陳述支持標籤。 標籤是您指派給文稿中語句的名稱。

在迴圈中使用繼續

未標記的 continue 語句會立即將程式流程傳回由 forforeachdowhile 語句所控制的最內部迴圈頂端。 迴圈目前的反覆專案會終止,迴圈會繼續進行下一個反覆專案。

在下列範例中,如果 while 變數等於5,則程式流程會傳回 $ctr 迴圈頂端。 因此,除了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 語句標籤。

在以下範例中,當 for$condition 時,最內層的 會被終止,而在 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 頂端,以獲取下一個輸入項目。

當單一輸入項目 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 發生的語句之後的下一條語句開始繼續執行。

請勿在迴圈、switch 或 trap 之外使用 continue

在直接支援它的建構外部使用 continue 時(迴圈、switchtrap),PowerShell 會 封入建構的呼叫堆疊。 如果找不到封入建構,則目前的 Runspace 會悄悄終止。

這意味著,如果函式和腳本不小心在不支援它的封閉結構外部使用 continue,可能會不小心終止它們的 呼叫者

在管線內使用 continue,例如 ForEach-Object 腳本區塊,不僅會結束管線,還可能會終止整個執行空間。

另請參閱