使用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}"
通用排查步骤
- 确认Ghostscript安装路径正确,版本
gs10.01.1存在且路径无拼写错误 - 检查目标文件夹
F:\myFOLDER存在,且当前用户有读写权限 - 运行脚本时打开命令行窗口,查看具体报错信息(如文件找不到、语法错误)
- 若使用Bash脚本,需在Git Bash、WSL等支持Bash的Windows环境中执行
内容的提问来源于stack exchange,提问作者iskander1220
相关产品推荐
相关产品推荐

