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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:42:39