主題 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