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