仅在嵌套循环中突破内循环

时间:2016-03-16 02:16:13

标签: powershell powershell-v3.0

我试图实施休息,所以当我得到结果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之类的标志,但我得到的只是语法错误。

任何人都知道怎么做?

2 个答案:

答案 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”