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

使用Ghostscript批量JPG转PDF:脚本失效问题求助

Ghostscript批量JPG转PDF脚本失效问题排查与修复

批处理脚本(第一个)问题分析与修复

原脚本的核心问题包括:

  • 未对含空格的文件名做引号包裹,导致文件名被拆分解析
  • 缺少-dBATCH参数,需手动执行quit退出Ghostscript,易引发进程残留
  • 循环调用时参数传递未做引号处理,存在路径解析风险

修复后的脚本(单JPG转单PDF):

@echo off
if "%1"=="Sub" goto %2
for %%f in ("F:\myFOLDER\*.jpg") do call "%~f0" Sub action "%%~nf"
goto end
:action

"C:\Program Files (x86)\gs\gs10.01.1\bin\gswin32c.exe" -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="F:\myFOLDER\%~3.pdf" "F:\myFOLDER\%~3.jpg"

:end

Bash脚本(第二个)问题分析与修复

原脚本的核心问题包括:

  • Windows路径使用反斜杠,PostScript语法要求正斜杠,导致路径解析失败
  • find命令的-o选项未加括号,匹配逻辑错误(会误包含非JPEG文件)
  • 未处理含空格的文件名,导致参数拆分报错
  • 未保证文件处理顺序,可能导致PDF页面顺序混乱

修复后的脚本(合并所有JPG为单PDF):

#!/bin/bash
dir="F:/myFOLDER"
output_file="F:/myFOLDER/out.pdf"

args=""
# 用while read处理含空格的文件名,同时修正find匹配逻辑
while IFS= read -r file; do
  # 将Windows路径反斜杠替换为PostScript兼容的正斜杠
  ps_file="${file//\\/\/}"
  args="${args} (${ps_file}) viewJPEG showpage"
done < <(find "${dir}" \( -name "*.JPG" -o -name "*.JPEG" -o -name "*.jpg" -o -name "*.jpeg" \) -type f | sort)

# 调用Ghostscript,统一使用正斜杠路径
"C:/Program Files (x86)/gs/gs10.01.1/bin/gswin32c.exe" -q -dNOSAFER -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="${output_file}" "C:/Program Files (x86)/gs/gs10.01.1/lib/viewjpeg.ps" -c "${args}"

通用排查步骤

  1. 确认Ghostscript安装路径正确,版本gs10.01.1存在且路径无拼写错误
  2. 检查目标文件夹F:\myFOLDER存在,且当前用户有读写权限
  3. 运行脚本时打开命令行窗口,查看具体报错信息(如文件找不到、语法错误)
  4. 若使用Bash脚本,需在Git Bash、WSL等支持Bash的Windows环境中执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:53:13