仅在嵌套循环中跳出内循环
Break out of inner loop only in nested loop
我正在尝试实现一个中断,这样当我得到 xxxxx 次结果时就不必继续循环。
$baseFileCsvContents | ForEach-Object {
# Do stuff
$fileToBeMergedCsvContents | ForEach-Object {
If ($_.SamAccountName -eq $baseSameAccountName) {
# Do something
break
}
# Stop doing stuff in this For Loop
}
# Continue doing stuff in this For Loop
}
问题是,break 正在退出两个 ForEach-Object
循环,而我只希望它退出内部循环。我试过读取和设置像 :outer
这样的标志,但是我得到的只是语法错误。
有人知道怎么做吗?
您将无法对 ForEach-Object 使用命名循环,但可以使用 ForEach 关键字代替,如下所示:
$OuterLoop = 1..10
$InnerLoop = 25..50
$OuterLoop | ForEach-Object {
Write-Verbose "[OuterLoop] $($_)" -Verbose
:inner
ForEach ($Item in $InnerLoop) {
Write-Verbose "[InnerLoop] $($Item)" -Verbose
If ($Item -eq 30) {
Write-Warning 'BREAKING INNER LOOP!'
BREAK inner
}
}
}
现在,每当每个内循环达到 30 时,它就会跳转到外循环并继续。
使用 return 关键字有效,因为 "ForEach-Object" 将脚本块作为参数,然后为管道中的每个元素调用该脚本块。
1..10 | ForEach-Object {
$a = $_
1..2 | ForEach-Object {
if($a -eq 5 -and $_ -eq 1) {return}
"$a $_"
}
"---"
}
将跳过“5 1”
我正在尝试实现一个中断,这样当我得到 xxxxx 次结果时就不必继续循环。
$baseFileCsvContents | ForEach-Object {
# Do stuff
$fileToBeMergedCsvContents | ForEach-Object {
If ($_.SamAccountName -eq $baseSameAccountName) {
# Do something
break
}
# Stop doing stuff in this For Loop
}
# Continue doing stuff in this For Loop
}
问题是,break 正在退出两个 ForEach-Object
循环,而我只希望它退出内部循环。我试过读取和设置像 :outer
这样的标志,但是我得到的只是语法错误。
有人知道怎么做吗?
您将无法对 ForEach-Object 使用命名循环,但可以使用 ForEach 关键字代替,如下所示:
$OuterLoop = 1..10
$InnerLoop = 25..50
$OuterLoop | ForEach-Object {
Write-Verbose "[OuterLoop] $($_)" -Verbose
:inner
ForEach ($Item in $InnerLoop) {
Write-Verbose "[InnerLoop] $($Item)" -Verbose
If ($Item -eq 30) {
Write-Warning 'BREAKING INNER LOOP!'
BREAK inner
}
}
}
现在,每当每个内循环达到 30 时,它就会跳转到外循环并继续。
使用 return 关键字有效,因为 "ForEach-Object" 将脚本块作为参数,然后为管道中的每个元素调用该脚本块。
1..10 | ForEach-Object {
$a = $_
1..2 | ForEach-Object {
if($a -eq 5 -and $_ -eq 1) {return}
"$a $_"
}
"---"
}
将跳过“5 1”