关于继续

简短说明

描述 语句如何 continue 立即将程序流返回到程序循环、 switch 语句或 trap 语句的顶部。

长说明

语句 continue 提供了一种退出当前控制块,但继续执行的方法,而不是完全退出。 语句支持标签。 标签是分配给脚本中的语句的名称。

在循环中使用 continue

未标记的continue语句会立即将程序流返回到由 for、、 foreachdowhile 语句控制的最内层循环的顶部。 循环的当前迭代终止,循环继续下一次迭代。

在以下示例中,如果$ctr变量等于 5,程序流将返回到循环的while顶部。 因此,将显示介于 1 和 10 之间的所有数字,但 5 除外:

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

    Write-Host -Object $ctr
}

使用 for 循环时,在 语句处 <Repeat> 继续执行,然后 <Condition> 执行测试。 在下面的示例中,不会发生无限循环,因为 的$i递减发生在关键字 (keyword) 之后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 语句标签。

在以下示例中,当 为 True$condition,最for内部的 终止,并且迭代将继续与 处的第二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

在 trap 语句中使用 continue

如果在正文中执行的最后一条语句为 trapcontinue,则以无提示方式忽略捕获的错误,并继续执行紧跟导致 trap 发生的语句之后的语句。

不要在循环、开关或陷阱之外使用 continue

continue 在直接支持它的构造之外使用 时, (循环、 switchtrap) ,PowerShell 会查找 封闭构造的调用堆栈 。 如果找不到封闭构造,则当前运行空间将静默终止。

这意味着,在支持它的封闭构造之外无意中使用 continue 的函数和脚本可能会无意中终止其 调用方

continue 管道(如脚本块) ForEach-Object 中使用 不仅会退出管道,还可能会终止整个运行空间。

另请参阅

about_Break

about_For

about_Comparison_Operators

about_Throw

about_Trap

about_Try_Catch_Finally