0%

PowerShell专题:ForEach-Object 跳过当次循环

1
2
3
4
5
6
7
8
9
10
11
12
13
# 假设我们有一个数组
$items = 1, 2, 3, 4, 5

# 使用 ForEach-Object 循环遍历数组
$items | ForEach-Object {

    # 检查当前项是否为3,如果是,则跳过这次迭代
    if ($_ -eq 3) {
        continue  
    }
    # 如果不是3,则输出当前项
    Write-Host "Processing item: ${_}"
}

上面的脚本输出什么结果?

1
2
Processing item: 1
Processing item: 2

是不是有点出乎意料?为什么没输出 4、5 呢?

因为,ForEach-Object 命令本身并不支持 continue 关键字,如果试图使用 continue 跳过某次循环,那么实际上会结束整个循环。

for/foreach 循环中使用 continue 才会跳过当前循环。

【结论】

ForEach-Object 循环中,想要跳过某次循环,正确的做法是使用 return

1
2
3
4
5
6
7
8
9
10
11
12
13
# 假设我们有一个数组
$items = 1, 2, 3, 4, 5

# 使用 ForEach-Object 循环遍历数组
$items | ForEach-Object {

    # 检查当前项是否为3,如果是,则跳过这次迭代
    if ($_ -eq 3) {
        return  
    }
    # 如果不是3,则输出当前项
    Write-Host "Processing item: ${_}"
}