[玩转系统] PowerShell 中断 ForEach 循环
作者:精品下载站 日期:2024-12-14 20:34:07 浏览:16 分类:玩电脑
PowerShell 中断 ForEach 循环
通常,学习者在 PowerShell 中使用 break
/continue
语句时会混淆 ForEach
和 ForEach-Object
,但也有ForEach
循环和 ForEach-Object
cmdlet 之间存在明显区别,这就是 break
/continue
语句不执行的原因在 ForEach-Object
cmdlet 中工作就像在 ForEach
Loop 中工作一样。
我们将在本文中了解这两个语句,但在深入了解细节之前,必须注意这两个语句 (break
/continue
) 都用于更改流程循环,但它们之间是有区别的。
break
语句立即退出循环,无论是否满足指定条件。这意味着将跳过循环的任何剩余迭代,并且将从紧随循环之后的语句开始执行。
另一方面,Continue 语句不会退出循环,而是跳过循环的当前迭代并移至下一次迭代。这意味着当前循环迭代中 continue
语句后面的任何代码都会被跳过,但循环本身会在下一次迭代中继续执行。
让我们通过下面的代码示例来学习它们。
在 ForEach
循环中使用 break
/continue
语句
在 PowerShell 的 ForEach
循环中使用 break
语句。
在 ForEach 循环中使用 Break 语句:
$range = 1..10
ForEach ($number in $range) {
if ($number -eq 5){
break
}
Write-Host $number
}
Write-Host "I am out of ForEach now."
输出 :
1
2
3
4
I am out of ForEach now.
首先,我们使用 ..
运算符根据给定的下限和上限创建数字范围,并将其存储在 $range
变量中。接下来,我们使用 ForEach
循环来迭代 $range
。
最后,我们在每次迭代中使用 if
语句和 -eq
运算符来检查当前数字(用 $number
表示)是否等于 5。如果是,则使用 break
语句退出循环;否则,使用 Write-Host
cmdlet 打印该数字。最后,我们在 ForEach
之外使用另一个 Write-Host
来显示何时退出循环。
当$number
等于5
时,上面的代码退出ForEach
循环。因此,break
语句后面的 Write-Host
cmdlet 将不会被执行。
在 PowerShell 的 ForEach
循环中使用 continue
语句。
在 ForEach 循环中使用 continue 语句:
$range = 1..10
foreach ($number in $range) {
if ($number -eq 5){
continue
}
Write-Host $number
}
Write-Host "I am out of ForEach now."
输出 :
1
2
3
4
6
7
8
9
10
I am out of ForEach now.
此示例与上一个示例相同,但这次我们使用了 continue
语句。当满足 if
语句时,continue
语句会跳过当前迭代并跳转到下一个迭代。请注意,continue
语句后面的任何语句都不会被执行。
在 PowerShell 的 ForEach
循环中使用 break
和 continue
语句。
在 ForEach 循环中使用 Break/Continue 语句:
$range = 1..10
foreach ($number in $range) {
if ($number -eq 5){
continue
}elseif($number -eq 9){
break
}
Write-Host $number
}
Write-Host "I am out of ForEach now."
输出 :
1
2
3
4
6
7
8
I am out of ForEach now.
此示例是最后两个代码示例的组合。它跳过了编号 5
处的迭代并继续后续迭代,但在编号为 9
时退出循环。
break
还可以在 PowerShell 中的 switch 和 trap 中使用。
让我们对上面的例子进行一些修改。假设您在 while
循环中使用 ForEach
循环。现在,您有两个数组,每个数组都包含整数值。 while
循环迭代 array1
。另一方面,对于 while
循环的每次迭代,ForEach
都会迭代 array2
。根据指定的 if
语句,在 ForEach
内使用 break
语句。
值得注意的是,只要 if
语句满足,break
语句就会中断 ForEach
循环,但你的工作是中断ForEach
和 while
都使用一个 break
语句进行循环,您必须在 ForEach
中使用该语句。怎么做呢?让我们通过下面的例子来学习一下。
在 ForEach
循环中使用带标签的 break
语句
要在 PowerShell 的 ForEach
中使用带标签的 break
:
- 创建两个包含整数值的数组并将它们存储在单独的变量中。
- 使用
while
迭代第一个数组。 对于
while
循环的每次迭代:- 使用
ForEach
迭代第二个数组。
- 使用
- 使用
if
语句和-eq
运算符来确定第二个数组的当前数字是否等于8
。 - 如果是,则中断
ForEach
和while
循环;否则,打印数字并移至下一次迭代。
Write-Host
cmdlet 来演示何时离开 ForEach
和 while
循环。在 ForEach 循环中使用带标签的 Break 语句:
$array1 = @(1,2,3,4)
$array2 = @(5,6,7,8,9)
$i=0
:breakAll while($i -lt $array1.length){
ForEach ($number in $array2) {
if ($number -eq 8){
break breakAll
}
Write-Host $number
}
$i++
Write-Host "I am out of ForEach now."
}
Write-Host "I am out of While now."
输出 :
5
6
7
I am out of While now.
在这里,我们使用了带标签的 break
语句,该语句退出带标签的循环,而不是离开 PowerShell 中的当前循环。
在 ForEach-Object
Cmdlet 中使用 break
/continue
/return
语句
在 PowerShell 的 ForEach-Object
cmdlet 中使用 break
语句。
在 ForEach-Object Cmdlet 中使用 Break 语句:
$range = 1..10
$range | ForEach-Object {
if ($_ -eq 5){
break
}
Write-Host $_
}
Write-Host "I am out of ForEach_Object now."
输出 :
1
2
3
4
我们期望 break
语句在编号 5
处退出 ForEach-Object
并在外部执行 Write-Host
ForEach-Object
打印 I am out of ForEach_Object now.
消息,但它取消了编号 5
处的整个脚本。
在 PowerShell 中的 ForEach-Object
cmdlet 中使用 continue
语句。
在 ForEach-Object Cmdlet 中使用Continue语句:
$range = 1..10
$range | ForEach-Object {
if ($_ -eq 5){
continue
}
Write-Host $_
}
Write-Host "I am out of ForEach_Object now."
输出 :
1
2
3
4
continue
语句也没有按其应有的方式工作。它没有跳过编号 5
处的迭代并继续下一次迭代,而是取消了编号 5
处的脚本,并且没有打印 I am out of ForEach_Object now .
消息。
因此,上面的两个示例表明 break
和 continue
语句不能用于改变 ForEach-Object
的流程;我们需要使用return
语句;请参见以下示例。
在 PowerShell 的 ForEach-Object
cmdlet 中使用 return
语句。
在 ForEach-Object Cmdlet 中使用 Return 语句:
$range = 1..10
$range | ForEach-Object {
if ($_ -eq 5){
return
}
Write-Host $_
}
Write-Host "I am out of ForEach_Object now."
输出 :
1
2
3
4
6
7
8
9
10
I am out of ForEach_Object now.
看,return
跳过了第 5
处的迭代,并从下一个迭代继续。请记住,在 ForEach
循环中使用 return
语句将破坏整个脚本,就像 break
和 continue
语句一样ForEach-Object
。
这就是 PowerShell 中断 ForEach 循环的全部内容。
猜你还喜欢
- 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 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[软件合集] 25年5月31日 精选软件66个
[电影] 黄沙漫天(2025) 4K.EDRMAX.杜比全景声 / 4K杜比视界/杜比全景声
[风口福利] 短视频红利新风口!炬焰创作者平台重磅激励来袭
[韩剧] 宝物岛/宝藏岛/金银岛(2025)【全16集】【朴炯植/悬疑】
[电影] 愤怒的牦牛 (2025) 国语中字 4k
[短剧合集] 2025年05月30日 精选+付费短剧推荐56部
[软件合集] 25年5月30日 精选软件26个
[软件合集] 25年5月29日 精选软件18个
[短剧合集] 2025年05月28日 精选+付费短剧推荐38部
[软件合集] 25年5月28日 精选软件37个
[剧集] [央视][笑傲江湖][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
[美图] 2W美女个美女小姐姐,饱眼福
[电视剧] [突围] [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