主题
    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




目录