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