about_Switch
適用於: Windows PowerShell 2.0, Windows PowerShell 3.0
主題
about_Switch
簡短描述
說明如何使用參數處理多個 If 陳述式。
詳細描述
若要檢查指令碼或函式的條件,請使用 If 陳述式。If 可以檢查許多類型的條件,包括變數值和物件屬性。
若要檢查多項條件,請使用 Switch 陳述式。Switch 陳述式相當於一系列的 If 陳述式,但是更簡單。Switch 陳述式會列出每項條件和選擇性動作。如果達到條件,就會執行此動作。
基本的 Switch 陳述式具有下列格式:
Switch (<test-value>)
{
<condition> {<action>}
<condition> {<action>}
}
例如,下列 Switch 陳述式會一一比較測試值 3 和每項條件。當測試值符合條件時,就會執行動作。
PS> switch (3)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."}
4 {"It is four."}
}
It is three.
在這個簡單的範例中,雖然有相符的值 3,但是值仍然會和清單中的每一項條件比較。下列的 Switch 陳述式有兩項條件的值為 3。它會依預設示範測試所有的條件。
PS> switch (3)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."}
4 {"It is four."}
3 {"Three again."}
}
It is three.
Three again.
若要引導 Switch 在找到相符項目後停止比較,請使用 Break 陳述式。Break 陳述式會終止 Switch 陳述式。
PS> switch (3)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."; Break}
4 {"It is four."}
3 {"Three again."}
}
It is three.
如果測試值是一個集合,例如陣列,則會依出現順序評估集合中的每個項目。下列範例會先評估 4 再評估 2。
PS> switch (4, 2)
{
1 {"It is one." }
2 {"It is two." }
3 {"It is three." }
4 {"It is four." }
3 {"Three again."}
}
It is four.
It is two.
所有的 Break 陳述式都是套用到集合,不是套用到每個值,如下例所示。Break 陳述式會在值為 4 的條件下終止 Switch 陳述式。
PS> switch (4, 2)
{
1 {"It is one."; Break}
2 {"It is two." ; Break }
3 {"It is three." ; Break }
4 {"It is four." ; Break }
3 {"Three again."}
}
It is four.
語法
完整的 Switch 陳述式語法如下:
switch [-regex|-wildcard|-exact][-casesensitive] (<value>)
或
switch [-regex|-wildcard|-exact][-casesensitive] -file filename
後面接著
{
"string"|number|variable|{ expression } { statementlist }
default { statementlist }
}
如不使用任何參數,Switch 會執行不區分大小寫但完全相符的值。如果值為集合,會依出現順序評估每一個元素。
Switch 陳述式必須包含至少一個條件陳述式。
當值不符合任何一種條件時,會觸發 Default 子句。它相當於 If 陳述式的 Else 子句。每個 Switch 陳述式中只允許一個 Default 子句。
Switch 具有下列參數:
Regex
對值和條件執行規則運算式比對。如果使用 Regex,會忽略 Wildcard 和 Exact。此外,如果比對的子句不是字串,也會忽略這個參數。
Example:
PS> switch ("fourteen")
{
1 {"It is one."; Break}
2 {"It is two."; Break}
3 {"It is three."; Break}
4 {"It is four."; Break}
3 {"Three again."; Break}
"fo*" {"That's too many."}
}
PS> switch -Regex ("fourteen")
{
1 {"It is one."; Break}
2 {"It is two."; Break}
3 {"It is three."; Break}
4 {"It is four."; Break}
3 {"Three again."; Break}
"fo*" {"That's too many."}
}
That's too many.
Wildcard
表示條件是萬用字元字串。如果使用 Wildcard,會忽略 Regex 和 Exact。此外,如果比對的子句不是字串,也會忽略這個參數。
Exact
表示當比對的子句是一個字串時即必須完全相符。如果使用 Exact 時,會忽略 Regex、Wildcard 和 Exact。此外,如果比對的子句不是字串,也會忽略這個參數。
CaseSensitive
執行區分大小寫的比對。如果比對的子句不是字串,就會忽略這個參數。
檔案
接受檔案輸入,不接受值陳述式。如果包含多個 File 參數,只會使用最後一個。Switch 陳述式會讀取及評估檔案的每一行。
允許多個 Regex、Wildcard 或 Exact 執行個體。不過,只有最後一個使用的參數有效。
如果值符合多個條件,每個條件的動作都會執行。若要變更這種行為,請使用 Break 或 Continue 關鍵字。
Break 關鍵字會停止處理並結束 Switch 陳述式。
Continue 關鍵字會繼續處理目前的值和任何後續的值。
如果條件是運算式或指令碼區塊,會在與值比較前才進行評估。值指派給 $_ 自動變數,可在運算式中取得。如果運算式為 True 或符合該值,比對即成功。運算式會在自己的範圍中評估。
"Default" 關鍵字指定的條件是,只有當任何其他條件都不符合值時才會評估。
每個條件的動作都獨立於其他條件下的動作。動作中的左大括弧 ( } ) 是明確的中斷。
另請參閱
about_Break
about_Continue
about_If
about_Script_Blocks