主题 about_Break 简短说明 描述一个可用于立即退出 Foreach、For、While、Do 或 Switch 语句的语句。 详细说明 当 Break 语句出现在如 Foreach、For、Switch 或 While 等循环中时,该 Break 语句将使 Windows PowerShell 立即退出该循环。在不循环的 Switch 构造中,Break 语句将使 Windows PowerShell 退出 Switch 代码块。 Break 语句可以包含用于退出嵌套循环的标签。标签可以指定脚本中的任何循环关键字,如 Foreach、For 或 While。使用标签时,Break 语句将使程序退出指定的循环。无论 Break 语句位 于哪个循环中,它都使程序退出指定的循环。 以下示例说明如何使用 Break 语句退出 For 语句: for($i=1; $i -le 10; $i++) { Write-Host $i break } 在此示例中,Break 语句在 $i 变量等于 1 时将使程序退出 For 循环。虽然 For 语句在 $i 大 于 10 之前计算结果都为 True,但 Windows PowerShell 仍会在第一次运行 For 循环时到达 break 语句。 Break 语句更常用于一定会满足某内部条件的循环中。以下面的 Foreach 语句为例: $i=0 $varB = 10,20,30,40 foreach ($val in $varB) { $i++ if ($val -eq 30) { break } } Write-Host "30 was found in array position $i" 在此示例中,Foreach 语句循环访问 $varB 数组。每次运行代码块时,$i 变量将递增 1。前两次运 行循环时 if 语句的计算结果为 False。第三次运行循环时,$i 等于 3 并且 $val 变量等于 30。这 时将运行 Break 语句,从而退出 Foreach 循环。 退出其他循环语句与退出 Foreach 循环的方式完全相同。在以下示例中,在使用 Trap 语句捕获到 DivideByZeroException 异常后,Break 语句将使程序退出 While 语句。 $i = 3 while ($true) { trap [DivideByZeroException] { Write-Host "divide by zero trapped" break } 1 / $i-- } Break 语句可以包含标签。如果将 Break 关键字与标签一起使用,Windows PowerShell 将退出 带标签的循环而不是退出当前循环。标签的语法如下(此示例演示了 While 循环中的一个标签): :myLabel while (<condition>) { <statement list>} 标签的格式是冒号加您指定的名称。标签必须是语句中的第一个标记,后面必须跟随循环关键字(如 While)。 在 Windows PowerShell 中,只有循环关键字(如 Foreach、For 和 While)可以带标签。 Break 将语句的执行移到带标签的循环之外。在嵌套循环中,这将产生与单用 Break 关键字不同的 结果。以下结构性示例中的 While 语句含有一个 For 语句: :myLabel while (<condition 1>) { for ($item in $items) { if (<condition 2>) { break myLabel } $item = $x # A statement inside the For-loop } } $a = $c # A statement after the labeled While-loop 如果 condition 2 计算结果为 True,则脚本执行将跳到带标签的循环之后的语句。在本示例中, 程序的执行将从"$a = $c"语句重新开始。 如下面的结构性示例所示,您可以嵌套多个带标签的循环。 :red while (<condition1>) { :yellow while (<condition2>) { while (<condition3>) { if ($a) {break} if ($b) {break red} if ($c) {break yellow} } # After innermost loop } # After "yellow" loop } # After "red" loop 如果 $b 变量计算结果为 True,则脚本的执行将在带"red"标签的循环之后继续。如果 $c 变量计 算结果为 True,则脚本控制的执行将在带"yellow"标签的循环之后继续。 如果 $a 变量计算结果为 True,则脚本执行将在最内层循环之后继续。跳出最内层循环不需要标签。 Windows PowerShell 不限制使用标签恢复执行的位置。标签甚至可以跨越脚本和函数调用的边界传 递控制。 Break 关键字用于退出 Switch 构造。例如,以下 Switch 语句使用 Break 语句测试可以满足的最精确 条件: $var = "word2" switch -regex ($var) { "word2" { Write-Host "Exact" $_ break } "word.*" { Write-Host "Match on the prefix" $_ break } "w.*" { Write-Host "Match on at least the first letter" $_ break } default { Write-Host "No match" $_ break } } 此示例创建 $Var 变量并将其初始化为字符串值"word2"。Switch 语句使用 Regex 类先将该变量 值与"word2"进行匹配。(Regex 类是一个 Microsoft .NET Framework 正则表达式类。)由 于变量值与 Switch 语句中的第一个测试值匹配,因此将运行 Switch 语句中的第一个代码块。 当 Windows PowerShell 到达第一个 Break 语句时,Switch 语句将退出。如果从此示例中删除这四 个 Break 语句,则所有四个条件都会满足。此示例使用 Break 语句显示满足最精确的条件时的结果。 另请参阅 about_Comparison_Operators about_For about_Foreach about_Switch about_While