当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell 中断 ForEach 循环

作者:精品下载站 日期:2024-12-14 20:34:07 浏览:16 分类:玩电脑

PowerShell 中断 ForEach 循环


[玩转系统] PowerShell 中断 ForEach 循环

通常,学习者在 PowerShell 中使用 break/continue 语句时会混淆 ForEachForEach-Object,但也有ForEach 循环和 ForEach-Object cmdlet 之间存在明显区别,这就是 break/continue 语句不执行的原因在 ForEach-Object cmdlet 中工作就像在 ForEachLoop 中工作一样。

我们将在本文中了解这两个语句,但在深入了解细节之前,必须注意这两个语句 (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 循环中使用 breakcontinue 语句。

在 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 循环,但你的工作是中断ForEachwhile 都使用一个 break 语句进行循环,您必须在 ForEach 中使用该语句。怎么做呢?让我们通过下面的例子来学习一下。

ForEach 循环中使用带标签的 break 语句

要在 PowerShell 的 ForEach 中使用带标签的 break

  • 创建两个包含整数值的数组并将它们存储在单独的变量中。
  • 使用 while 迭代第一个数组。
  • 对于 while 循环的每次迭代:

    • 使用 ForEach 迭代第二个数组。
  • 使用 if 语句和 -eq 运算符来确定第二个数组的当前数字是否等于 8
  • 如果是,则中断 ForEachwhile 循环;否则,打印数字并移至下一次迭代。
  • 我们使用两个 Write-Host cmdlet 来演示何时离开 ForEachwhile 循环。
  • 在 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 . 消息。

    因此,上面的两个示例表明 breakcontinue 语句不能用于改变 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 语句将破坏整个脚本,就像 breakcontinue 语句一样ForEach-Object

    这就是 PowerShell 中断 ForEach 循环的全部内容。

    您需要 登录账户 后才能发表评论

    取消回复欢迎 发表评论:

    关灯