主題
    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 一律會結束指定的迴圈。


    在下列範例中,會示範如何使用 Break 陳述式結束 For 陳述式:


        for($i=1; $i -le 10; $i++)
        {
            Write-Host $i
            break
        }


    在這個範例中,只要 $i 變數等於 1,Break 陳述式隨即結束 For 迴圈。儘管 For 陳
    述式評估為 True 的條件是 $i 大於 10,但 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 (<條件>) { <陳述式清單>}


    冒號後面加上指派的名稱即代表標籤。標籤必須是陳述式中的第一個語彙基元,而且後面
    必須接著迴圈關鍵字,例如 While。
 

    在 Windows PowerShell 中只有迴圈關鍵字 (如 Foreach、For 和 While) 才能有
    標籤。


    Break 會讓執行跳離有標籤的迴圈。在有標籤的迴圈中,這個結果與 Break 關鍵字單獨
    使用的結果並不相同。下列是一個有 For 陳述式的 While 陳述式的概略範例:
 

        :myLabel while (<條件 1>) 
        {
            for ($item in $items) 
            { 
                if (<條件 2>) { break myLabel } 
                $item = $x  # For 迴圈內的陳述式 }
        }
        $a = $c # 有標籤的 While 迴圈之後的陳述式


    如果條件 2 評估為 True,指令碼的執行會跳至有標籤的迴圈之後的陳述式。在這個範例
    中,會再次從 "$a = $c" 陳述式開始執行。


    您可以將許多有標籤的迴圈巢狀化,如下列概略範例所示:


        :red while (<條件1>)
        {
            :yellow while (<條件2>)
            {
                while (<條件3>)
                {
                    if ($a) {break}
                    if ($b) {break red}
                    if ($c) {break yellow}
                }
                # 在最內層迴圈之後
            }
                # 在 "yellow" 迴圈之後
        }
                # 在 "red" 迴圈之後


    如果 $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




目錄