当条件满足时,在一个while循环内停止foreach

时间:2017-09-21 11:02:46

标签: powershell

我想检查所有驱动器号中是否有文件,将其复制到另一个驱动器,如果找到则停止搜索其他驱动器。

While (Test-Path D:\folder\1.txt)
{
    Foreach ($dir in @("E:","F:","G:"))
    {
        IF (Test-Path $dir\folder\1.txt)
        {
            Copy-Item $dir\folder\1.txt D:\folder -Force
        }
    }
}

但脚本首先在E驱动器上找到1.txt,复制它,然后在F驱动器上找到1.txt并复制。如何在第一个驱动器上找到文件时停止?

2 个答案:

答案 0 :(得分:1)

您可以使用break关键字。你也不需要在这里使用while循环:

    Foreach ($dir in @("E:","F:","G:"))
    {
        IF (Test-Path $dir\folder\1.txt)
        {
            Copy-Item $dir\folder\1.txt D:\folder -Force
            break
        }
    }

答案 1 :(得分:0)

您需要一个条件来停止循环。在这种情况下,当文件D:\ folder \ 1.txt存在时,它看起来好像要停止。因此,当文件不存在时,条件为真。例如:

While (-not (Test-Path D:\folder\1.txt)) {
    Foreach ($dir in @("E:","F:","G:")) {
        IF (Test-Path $dir\folder\1.txt) {
            Copy-Item $dir\folder\1.txt D:\folder -Force
        }
    }
}