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

PowerShell foreach循环调用ocrmypdf.exe变量传参问题求解

核心错误说明

原有脚本运行失败的问题点:

  • PowerShell中单引号包裹的内容不会做变量解析,'$source'、'$destfiles'会被识别为固定文本字符串,不会读取变量存储的文件路径数据
  • 提前批量生成全量目标路径列表后,循环过程没有做索引对应,很容易出现源文件和目标路径匹配错位
  • 执行参数定义在循环外,直接把整个文件数组作为单次调用的参数传入,不符合ocrmypdf单文件处理的调用规则
  • 没有提前校验目标输出文件夹是否存在,首次运行时会因为路径不存在触发报错
可直接运行的完整脚本
# 基础路径配置
$sourcePath = 'X:\OCR'
$destPath = 'X:\ocr\done'
$exePath = 'ocrmypdf.exe'

# 自动创建目标文件夹(不存在时才创建)
if (-not (Test-Path $destPath -PathType Container)) {
    New-Item $destPath -ItemType Directory -Force | Out-Null
}

# 获取目录下所有PDF文件
$pdfList = Get-ChildItem -Path $sourcePath -Filter '*.pdf' -File

# 遍历逐个处理PDF
foreach ($pdf in $pdfList) {
    # 拼接当前文件对应的输出路径,避免手动拼接斜杠出错
    $currentOutput = Join-Path $destPath $pdf.Name
    # 调用ocrmypdf执行识别
    & $exePath $pdf.FullName $currentOutput
}
常用扩展配置
  • 需要添加ocrmypdf运行参数时,直接在调用行追加即可,比如启用中英文混合识别、跳过已有文本的PDF,可将调用行修改为:
    & $exePath -l chi_sim+eng --skip-text $pdf.FullName $currentOutput
    
  • 需要递归处理源目录下所有子文件夹的PDF时,给Get-ChildItem添加-Recurse参数即可,注意同步调整输出路径生成逻辑保留原有目录结构,避免文件重名覆盖
  • 调试阶段可在调用前加一行打印路径,校验源和目标路径是否符合预期:
    Write-Host "处理中: $($pdf.FullName) -> $currentOutput"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:09:21