You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本如何检测目录中多个指定文件是否已完成解压

解决思路与修正脚本

你的问题出在原脚本的逻辑判断上:当目标文件还未出现时,Get-ChildItem会返回空集合,后续的Test-Path没有有效输入,导致-notcontains $false错误判定为$true,提前终止循环。

以下是修正后的方案,核心是逐个验证目标文件的存在性,确保所有文件都出现后再继续:

修正脚本(兼容所有PowerShell版本)

# 定义需要等待的目标文件名列表
$targetFiles = @("file1.txt", "file2.txt", "file3.txt")
# 替换为你的目标文件夹路径
$targetDir = "C:\Your\Target\Directory"

do {
    # 检查每个文件是否在目标目录(含子目录)存在
    $missingFiles = $targetFiles | Where-Object {
        -not (Test-Path -Path (Join-Path $targetDir $_) -Recurse)
    }

    if (-not $missingFiles) {
        Write-Host "All files extracted. Continuing..."
        break
    }
    # 每次循环等待1秒,避免过度占用CPU
    Start-Sleep -Seconds 1
} while ($true)

简化写法(PowerShell 7+支持)

如果使用PowerShell 7及以上版本,可以用-All运算符简化判断:

$targetFiles = @("file1.txt", "file2.txt", "file3.txt")
$targetDir = "C:\Your\Target\Directory"

do {
    $allExists = $targetFiles.All({ Test-Path (Join-Path $targetDir $_) -Recurse })
    if ($allExists) {
        Write-Host "All files extracted. Continuing..."
        break
    }
    Start-Sleep -Seconds 1
} while ($true)

关键改进点

  1. 精准验证每个文件:不再依赖Get-ChildItem的结果,直接针对每个目标文件做存在性检查,避免空集合导致的误判。
  2. 添加等待间隔:通过Start-Sleep降低循环频率,减少系统资源消耗。
  3. 可选缺失反馈:如果需要调试,可以在循环中添加Write-Host "Waiting for: $($missingFiles -join ', ')",实时查看当前缺失的文件。

内容的提问来源于stack exchange,提问作者Harlan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 18:34:53