使用GhostScript获取PDF页数时遇PowerShell StandardOutput重定向错误
解决PowerShell调用GhostScript获取PDF页数的输出重定向错误
错误原因
你遇到的错误是因为使用Start-Process时未显式开启标准输出重定向——默认情况下该命令不会捕获子进程的输出,必须通过指定参数主动开启重定向。
解决方法
方法1:修正Start-Process的用法
在PowerShell中用Start-Process捕获输出,需要添加-RedirectStandardOutput参数指定输出文件,之后读取文件内容即可:
$gsPath = "C:\Program Files\gs\gs9.53.3\bin\gswin64c.exe" $pdfPath = "C:\Temp\Test.pdf" # 用单引号Here-String避免不必要的转义 $gsCommands = @' -q -dNODISPLAY -c "($pdfPath) (r) file runpdfbegin pdfpagecount = quit" '@ # 创建临时文件存储输出 $tempOutput = [System.IO.Path]::GetTempFileName() # 启动进程并重定向输出到临时文件,-Wait确保进程执行完成再继续 Start-Process -FilePath $gsPath -ArgumentList $gsCommands -NoNewWindow -Wait -RedirectStandardOutput $tempOutput # 读取输出内容 $pageCount = Get-Content $tempOutput -Raw # 清理临时文件 Remove-Item $tempOutput -Force Write-Host "PDF页数:$pageCount"
方法2:使用调用操作符&(更简便)
直接用&调用GhostScript,它会自动捕获标准输出,无需额外重定向配置,修复你注释掉的代码即可:
$gsPath = "C:\Program Files\gs\gs9.53.3\bin\gswin64c.exe" $pdfPath = "C:\Temp\Test.pdf" # 将参数拆分为数组,避免路径含空格时的解析错误 $gsArgs = @( "-q", "-dNODISPLAY", "-c", """($pdfPath) (r) file runpdfbegin pdfpagecount = quit""" ) # 直接调用并捕获输出,2>&1将错误输出重定向到标准输出 $pageCount = & $gsPath $gsArgs 2>&1 Write-Host "PDF页数:$pageCount"
额外注意事项
如果PDF路径包含空格,务必确保路径被双引号包裹,避免GhostScript解析路径时出错。
内容的提问来源于stack exchange,提问作者Peter Sun
相关产品推荐
相关产品推荐

