about_Continue
简短说明
描述语句如何 continue
立即将程序流返回到程序循环、 switch
语句或 trap
语句的顶部。
长说明
语句 continue
提供了一种退出当前控制块但继续执行而不是完全退出的方法。 语句支持标签。
标签是分配给脚本中的语句的名称。
在循环中使用 continues
未标记的continue
语句会立即将程序流返回到由 for
、、 foreach
do
或 while
语句控制的最内层循环的顶部。 循环的当前迭代终止,循环继续下一次迭代。
在以下示例中,如果$ctr
变量等于 5,程序流将返回到循环的while
顶部。 因此,将显示 1 和 10 之间的所有数字,但 5 除外:
while ($ctr -lt 10)
{
$ctr += 1
if ($ctr -eq 5)
{
continue
}
Write-Host -Object $ctr
}
使用 for
循环时,在 语句处 <Repeat>
继续执行,然后 <Condition>
执行测试。 在下面的示例中,由于 在关键字 (keyword) 之后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
语句终止迭代的执行,并将控制权转移到目标封闭迭代或 switch
语句标签。
在以下示例中,当 为 True 时$condition
,最for
内部的 将终止,并在 处labelB
继续迭代第二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
以获取下一个输入项。
当有一个输入项 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
当 continue
在直接支持它的构造外部使用 时, (循环、 switch
trap
) ,PowerShell 会查找封闭构造的调用堆栈。 如果找不到封闭构造,则当前运行空间将静默终止。
这意味着,意外使用 continue
支持它的封闭构造外部的函数和脚本可能会无意中终止其 调用方。
在 continue
管道中使用(如 ForEach-Object
脚本块)不仅会退出管道,还可能会终止整个运行空间。