共用方式為


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