我试图实施休息,所以当我得到结果xxxxx次时,我不必继续循环。
/usr | grep dl-debug.c
问题是,break正在退出两个$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
}
循环,我只想让它退出内循环。我尝试过阅读和设置ForEach-Object
之类的标志,但我得到的只是语法错误。
任何人都知道怎么做?
答案 0 :(得分:5)
您将无法使用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时,它将突破到外部循环并继续。
答案 1 :(得分:1)
使用return关键字是有效的,因为“ ForEach-Object”将脚本块作为参数,然后为管道中的每个元素调用该脚本块。
1..10 | ForEach-Object {
$a = $_
1..2 | ForEach-Object {
if($a -eq 5 -and $_ -eq 1) {return}
"$a $_"
}
"---"
}
将跳过“ 5 1”