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

PowerShell需求:检测C:\pdf中PDF存在后执行逻辑,否则每15秒重试

我来帮你修复这个问题——原脚本的核心问题是没有先确认并锁定要处理的PDF文件列表,导致在检测到文件后、实际打印前,如果文件被意外删除,就会触发错误。下面是改进后的脚本,完全解决了这个问题,同时让流程更健壮:

改进后的PowerShell脚本
$fileDirectory = "C:\pdf"
$checkInterval = 15  # 检测间隔(秒)

do {
    # 第一步:获取目录中所有PDF文件,先缓存到变量里,避免后续文件变动影响处理流程
    $pdfFiles = Get-ChildItem -Path $fileDirectory -Filter "*.pdf" -File

    # 只有当存在PDF文件时,才执行打印、清理等后续操作
    if ($pdfFiles.Count -gt 0) {
        Write-Host "检测到$($pdfFiles.Count)个PDF文件,开始处理..."
        
        # 遍历所有缓存的PDF文件并提交打印任务
        foreach ($file in $pdfFiles) {
            try {
                # 启动打印,隐藏窗口并捕获进程对象
                $printProcess = Start-Process -FilePath $file.FullName -Verb Print -WindowStyle Minimized -PassThru -ErrorAction Stop
                Write-Host "已提交打印任务:$($file.Name)"
            }
            catch {
                Write-Warning "打印文件$($file.Name)失败:$_"
            }
        }

        # 等待打印任务提交完成(可根据你的打印机速度调整等待时间)
        Start-Sleep -Seconds 2

        # 优雅关闭Acrobat Reader进程(优先正常关闭,失败则强制终止)
        Get-Process -Name AcroRd32 -ErrorAction SilentlyContinue | ForEach-Object {
            if ($_.CloseMainWindow()) {
                Write-Host "已正常关闭Acrobat Reader进程:$($_.Id)"
            }
            else {
                $_.Kill()
                Write-Host "强制终止无响应的Acrobat Reader进程:$($_.Id)"
            }
        }
        Start-Sleep -Seconds 1

        # 仅删除目录中的PDF文件,避免误删其他类型文件
        try {
            Remove-Item -Path "$fileDirectory\*.pdf" -Force -ErrorAction Stop
            Write-Host "已清理所有PDF文件"
        }
        catch {
            Write-Warning "清理PDF文件失败:$_"
        }
    }
    else {
        Write-Host "未检测到PDF文件,$checkInterval秒后重新检测..."
    }

    # 等待下一次检测周期
    Start-Sleep -Seconds $checkInterval
} while ($true)

关键改进点说明

  • 先缓存文件列表:把要处理的PDF文件先存到$pdfFiles变量中,确保后续操作的是检测到的那批文件,彻底避免“检测到存在但处理时文件已被删除”的问题
  • 精准过滤目标文件:用-Filter "*.pdf"和-File参数,只处理PDF格式的文件,排除文件夹和其他类型文件的干扰
  • 添加错误处理机制:通过try/catch和-ErrorAction参数,捕获打印、删除过程中的异常,避免脚本直接崩溃
  • 优化进程关闭逻辑:先尝试正常关闭Acrobat Reader,无法关闭时再强制终止,减少系统资源占用
  • 明确的流程分支:只有当确实存在PDF文件时才执行后续操作,否则直接进入等待,避免无效的遍历和清理动作

原脚本的问题分析

原脚本没有先确认文件存在就直接执行遍历,而且在遍历后立刻执行删除操作(虽然在打印之后),如果在遍历文件到启动打印的间隙中文件被删除,就会导致打印失败。改进后的脚本通过先缓存文件列表,从根源上解决了这个时序问题。

内容的提问来源于stack exchange,提问作者Gwill Zx Spectrum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:59:34