about_Switch

应用到: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.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 语句都适用于集合,而不是每个值,如以下示例所示。Switch 语句在值为 4 的条件下被 Break 语句终止。

         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 关键字继续处理当前值和任何后续值。

如果条件是表达式或脚本块,将仅在与值进行比较前计算该条件。值分配给 $_ automatic 变量,并且在表达式中可用。如果表达式为 ture 或与值匹配,则匹配成功。表达式在其自己的范围内进行计算。

“Default”关键字指定仅在没有其他条件与值匹配时计算的条件。

每个条件的操作独立于其他条件中的操作。操作中的右大括号 (}) 是显式的换行符。

另请参阅

about_Break

about_Continue

about_If

about_Script_Blocks