[玩转系统] 关于开关
作者:精品下载站 日期:2024-12-14 02:18:04 浏览:15 分类:玩电脑
关于开关
简短描述
解释如何使用 switch 处理多个 if
语句。
详细描述
要检查脚本或函数中的条件,请使用 if
语句。 if
语句可以检查多种类型的条件,包括变量的值和对象的属性。
要检查多个条件,请使用 switch
语句。 switch
语句相当于一系列 if
语句,但更简单。 switch
语句列出了每个条件和一个可选操作。如果满足条件,则执行操作。
switch
语句可以使用 $_
和 $switch
自动变量。有关详细信息,请参阅 about_Automatic_Variables。
句法
基本的 switch
语句具有以下格式:
Switch (<test-expression>)
{
<result1-to-be-matched> {<action>}
<result2-to-be-matched> {<action>}
}
等效的 if
语句是:
if (<result1-to-be-matched> -eq (<test-expression>)) {<action>}
if (<result2-to-be-matched> -eq (<test-expression>)) {<action>}
<test-expression>
是在表达式模式下计算以返回值的单个表达式。
<result-to-be-matched>
是一个表达式,其值与输入值进行比较。表达式包括文字值(字符串或数字)、变量和返回布尔值的脚本块。
任何不被识别为数字的未加引号的值都将被视为字符串。为了避免混淆或意外的字符串转换,您应该始终引用字符串值。将任何表达式括在括号 ()
中,创建子表达式,以确保正确计算表达式。
重要的是要理解 <result-to-be-matched>
值位于比较表达式的左侧。这意味着 <test-expression>
的结果在右侧,可以将其转换为左侧值的类型进行比较。有关详细信息,请参阅 about_Comparison_Operators
值 default
是为没有其他匹配项时使用的操作保留的。
$_
自动变量包含传递给 switch
语句的表达式的值,并且可在 <result-to- 范围内求值和使用be-matched>
语句。
完整的switch
语句语法如下:
switch [-regex | -wildcard | -exact] [-casesensitive] (<test-expression>)
{
"string" | number | variable | { <value-scriptblock> } { <action-scriptblock> }
default { <action-scriptblock> } # optional
}
或者
switch [-regex | -wildcard | -exact] [-casesensitive] -file filename
{
"string" | number | variable | { <value-scriptblock> } { <action-scriptblock> }
default { <action-scriptblock> } # optional
}
如果不使用参数,switch
的行为与使用 Exact 参数相同。它对值执行不区分大小写的匹配。如果该值是集合,则按每个元素出现的顺序对其求值。
switch
语句必须至少包含一个条件语句。
当值不匹配任何条件时,将触发 default
子句。它相当于 if
语句中的 else
子句。每个 switch
语句中只允许有一个 default
子句。
switch
有以下参数:
- 通配符 - 表示条件是通配符字符串。如果匹配子句不是字符串,则忽略该参数。比较不区分大小写。
- Exact - 表示匹配子句如果是字符串,则必须完全匹配。如果匹配子句不是字符串,则忽略此参数。比较不区分大小写。
- 区分大小写 - 执行区分大小写的匹配。如果匹配子句不是字符串,则忽略此参数。
- 文件 - 从文件而不是
<test-expression>
获取输入。如果包含多个 File 参数,则仅使用最后一个。文件的每一行都由switch
语句读取和评估。比较不区分大小写。 - Regex - 执行值与条件的正则表达式匹配。如果匹配子句不是字符串,则忽略此参数。比较不区分大小写。
$matches
自动变量可在匹配语句块中使用。
笔记
当指定冲突值时,例如 Regex 和 通配符,最后指定的参数优先,所有冲突参数都将被忽略。还允许参数的多个实例。但是,仅使用列出的最后一个参数。
示例
在以下示例中,switch
语句将测试值 3 与每个条件进行比较。当测试值与条件匹配时,执行操作。
switch (3)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."}
4 {"It is four."}
}
It is three.
在这个简单的示例中,即使值 3 匹配,也会将该值与列表中的每个条件进行比较。以下 switch
语句有两个值 3 的条件。它演示了,默认情况下,测试所有条件。
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
语句。
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。
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
语句终止。
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
语句正在测试哈希表中值的类型。您必须使用返回布尔值的表达式来选择要执行的脚本块。
$var = @{A = 10; B = 'abc'}
foreach ($key in $var.Keys) {
switch ($var[$key].GetType()) {
{ $_ -eq [int32] } { "$key + 10 = $($var[$key] + 10)" }
{ $_ -eq [string] } { "$key = $($var[$key])" }
}
}
A + 10 = 20
B = abc
在此示例中,将不是字符串或数字数据的对象传递给switch
。 switch
对对象执行字符串强制转换并评估结果。
$test = @{
Test = 'test'
Test2 = 'test2'
}
$test.ToString()
switch -Exact ($test)
{
'System.Collections.Hashtable'
{
'Hashtable string coercion'
}
'test'
{
'Hashtable value'
}
}
System.Collections.Hashtable
Hashtable string coercion
在此示例中,没有匹配的情况,因此没有输出。
switch ("fourteen")
{
1 {"It is one."; Break}
2 {"It is two."; Break}
3 {"It is three."; Break}
4 {"It is four."; Break}
"fo*" {"That's too many."}
}
通过添加 default
子句,您可以在其他条件不成立时执行操作。
switch ("fourteen")
{
1 {"It is one."; Break}
2 {"It is two."; Break}
3 {"It is three."; Break}
4 {"It is four."; Break}
"fo*" {"That's too many."}
Default {
"No matches"
}
}
No matches
为了使单词“fourteen”匹配大小写,您必须使用 -Wildcard
或 -Regex
参数。
PS> switch -Wildcard ("fourteen")
{
1 {"It is one."; Break}
2 {"It is two."; Break}
3 {"It is three."; Break}
4 {"It is four."; Break}
"fo*" {"That's too many."}
}
That's too many.
以下示例使用 -Regex
参数。
$target = 'https://bing.com'
switch -Regex ($target)
{
'^ftp\://.*$' { "$_ is an ftp address"; Break }
'^\w+@\w+\.com|edu|org$' { "$_ is an email address"; Break }
'^(http[s]?)\://.*$' { "$_ is a web address that uses $($matches[1])"; Break }
}
https://bing.com is a web address that uses https
以下示例演示了如何使用脚本块作为 switch
语句条件。
switch ("Test")
{
{$_ -is [String]} {
"Found a string"
}
"Test" {
"This $_ executes as well"
}
}
Found a string
This Test executes as well
以下示例处理包含两个日期值的数组。 <value-scriptblock>
比较每个日期的 Year 属性。 <action-scriptblock>
显示欢迎消息或距离 2022 年年初的天数。
switch ((Get-Date 1-Jan-2022), (Get-Date 25-Dec-2021)) {
{ $_.Year -eq 2021 } {
$days = ((Get-Date 1/1/2022) - $_).days
"There are $days days until 2022."
}
{ $_.Year -eq 2022 } { 'Welcome to 2022!' }
}
如果该值与多个条件匹配,则执行每个条件的操作。要更改此行为,请使用 break
或 continue
关键字。
break
关键字停止处理并退出 switch
语句。
continue
关键字停止处理当前值,但继续处理任何后续值。
以下示例处理数字数组并显示它们是奇数还是偶数。使用 continue
关键字会跳过负数。如果遇到非数字,则使用 break
关键字终止执行。
switch (1,4,-1,3,"Hello",2,1)
{
{$_ -lt 0} { continue }
{$_ -isnot [Int32]} { break }
{$_ % 2} {
"$_ is Odd"
}
{-not ($_ % 2)} {
"$_ is Even"
}
}
1 is Odd
4 is Even
3 is Odd
参见
- about_Break
- 关于_继续
- 关于_如果
- about_Script_Blocks
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag