about_Break

適用於: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

在此插入簡介。

主題

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 迴圈。即使直到 $i 大於 10,For 陳述式都是評估為 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

如果條件 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,就會在標籤為「紅色」的迴圈之後,繼續執行指令碼。如果 $c 變數評估為 True,就會在標籤為「黃色」的迴圈之後,繼續執行指令碼控制項。

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

about_Continue

about_For

about_Foreach

about_Switch

about_Throw

about_Trap

about_Try_Catch_Finally

about_While