about_Switch
主題
about_Switch
簡短描述
說明如何使用 switch 處理多個 If 陳述式。
完整描述
指令碼或程式常利用 If 陳述式決定執行流程。 基本上,其用意是「若此條件為真,即執
行這個動作。 否則就執行那個動作」。您可以視需要多次執行這類作業,但如果條件太多,
If 陳述式將顯得過於繁雜。 使用 switch 陳述式則可結合較長的條件清單。 和所有的分支
陳述式一樣,必須使用大括號 ({}) 括住指令碼區塊。
Switch 陳述式的實質效果有如一系列的 If 陳述式。 此陳述式會將運算式與每項條件逐
一進行比對。 如果找到相符項目,便會執行該條件的相關動作。 基本 switch 陳述式採
用下列格式:
PS> $a = 3
PS> switch ($a) {
1 {"這是一。"}
2 {"這是二。"}
3 {"這是三。"}
4 {"這是四。"}
}
這是三。
這個簡單的範例將變數值與清單中的每項條件進行比較, 而採取的動作會顯示相符項目的
對應字串。 不過,如果您檢查所有條件,可能就會發現問題。 例如:
PS> $day = "day5"
PS> switch ($day){
day1 {"星期一"; break}
day2 {"星期二"; break}
day3 {"星期三"; break}
day4 {"星期四"; break}
day5 {"星期五"; break}
day6 {"星期六"; break}
day7 {"星期日"; break}
day5 {"太多天"; break}
}
星期五
清單中有兩項條件都是 day5。 但是,每項條件結尾的 break 會指示 switch 找到相符項目
後即停止,並且執行找到的動作。 如果沒有 break 陳述式,便會執行這兩個 day5 動作。
如果 switch 檢查的值是陣列,則會從元素 0 (零) 開始依序評估陣列中的每個元素。 至
少應有一個元素至少符合一項條件,否則將產生錯誤。 default 子句若不止一個也會發生錯
誤。
完整的 switch 語法如下所示:
switch [-regex|-wildcard|-exact][-casesensitive] ( 管線 )
或
switch [-regex|-wildcard|-exact][-casesensitive] -file 檔名
後面接著
{
"字串"|數字|變數|{ 運算式 } { 陳述式清單 } default { 陳述式清單}
}
根據預設,如果未使用參數,則 Switch 的行為會像是執行不區分大小寫的完全相符比對。
如果「管線」產生陣列,則將以遞增位移順序逐一評估陣列中的每個元素 (從 0 [零] 開始)。
Switch 程式碼區塊內至少必須有一個條件元素,而且只能有一個 default 子句。 若有
一個以上的 default 子句,將會發生 ParseException 例外狀況。
Switch 具有下列參數:
Regex 表示比對子句若是字串,則視為規則運算式字串。 使用
此參數會停用 Wildcard 和 Exact。 如果比對子句不是字串,則會忽略此參數。
Wildcard 表示比對子句若是字串,則視為萬用字元字串。 使用此參數會停用
Regex 和 Exact。 如果比對子句不是字串,則會忽略此參數。
Exact 表示比對子句若是字串,則必須完全相符。 使用此參數
會停用 Wildcard 和 Regex。 如果比對子句不是字串,則會忽略此參數。
CaseSensitive 比對子句若是字串,則會將其修改為區分大小寫。 如果比對子
句不是字串,則會忽略此參數。
File 從檔案 (或足以代表檔案者) 取得輸入,而不是從陳述式。 如果有多個 File 參數,
則會使用最後一個。 會讀取檔案的每一行並傳入 switch 區塊。
允許使用多個 Regex、Wildcard 或 Exact, 但陳述式的行為僅由最後一個參數所控制。
Break 關鍵字表示不再繼續處理,將會立即結束 Switch 陳述式。
Continue 關鍵字表示不再繼續處理目前的語彙基元,並且將評估條件中的下一個語彙基
元。 如果沒有可評估的語彙基元,將會結束 Switch 陳述式。
"{ 運算式 }" 區塊是進行比較時所要評估的程式碼區塊。 目前物件會繫結至 $_ 自動變
數,可供運算式評估期間使用。 如果運算式評估為 "True",比較結果即視為相符。 此運
算式將於新範圍內進行評估。
switch 陳述式內的 "Default" 關鍵字表示,若找不到相符項目,則評估此關鍵字後面
的程式碼區塊。 程式流程無法從某一區塊跳到另一區塊,因為複合清單中的右括號 ( } )
明示為 break。
如果找到多個相符項目,就會執行每個相符項目的對應運算式。 為避免發生這種情形,可
以使用 Break 或 Continue 關鍵字停止繼續比較。
請參閱
about_Break
about_Continue
about_If
about_Script_Blocks