powershell 如何检查一个目录中是否有多个正在解压缩的文件

jbose2ul  于 5个月前  发布在  Shell
关注(0)|答案(1)|浏览(99)

我有一个zip文件中的3个文件的列表。作为一个例子,它们被命名为file1.txt, file2.txt, file3.txt
然后,我有一个在后台运行的进程,它会自动将它们提取到一个已经包含其他文件的文件夹中。
我想运行一个启动该进程的脚本(我可以做到这一点),然后等待这三个文件在继续操作之前出现在目录中。我尝试过dowhile循环的不同组合,但每次循环的结果都是在文件实际出现之前出现true。如果标签还不够提示,这是一个PowerShell脚本。
这是我目前得到的,虽然它会自动进入休息:

do {
   $result = (Get-ChildItem -Path "$path\*" -Recurse -Include $emvfiles, $pefiles -Verbose -ErrorAction SilentlyContinue | Test-Path) -notcontains $false
   if ($result) {
      Write-Host "All files extracted. Continuing..."
      break
   }
} while ($true)

字符串
有什么想法吗?

1zmg4dgp

1zmg4dgp1#

问题是do-while循环中的条件总是计算为true,因为Test-Path小程序返回一个布尔值,而-notcontains运算符没有正确使用。因此,要解决这个问题,请使用Get-ChildItem获取目录中的文件并过滤所需的特定文件名。然后检查提取文件的计数是否等于3,这表明所有三个文件都存在。如果是这样,则跳出循环。

do {
     $extractedFiles = Get-ChildItem -Path $path -File -ErrorAction SilentlyContinue  | Where-Object {$_.Name -eq "file1.txt" -or $_.Name -eq "file2.txt" -or $_.Name -eq "file3.txt"}
    if ($extractedFiles.Count -eq 3) {
        Write-Host "Tous les fichiers ont été extraits. Continuation..."
        break
    }
    Start-Sleep -Seconds 1
} while ($true)

字符串
Start-Sleep -Seconds 1:等待1秒钟,然后再次检查。

相关问题