我仍然没有解决为什么这段代码能正确地运行所有的子文件夹,寻找jpg文件来转换为pdf文件,并将其压缩,但在执行任何命令之前,在最后的')'后退出。这肯定是ps2pdf的原因,但想不出ps2pdf会有什么变化。有什么办法吗?
@echo on
set records="C:\Users\john\Documents\0 BDHS Digitised records\Awaiting processing\"
cd %records%
setlocal enabledelayedexpansion
for /r . %%G in (.) do ( Pushd %%G
If %errorlevel% NEQ 0 goto:eof
rem merge jpgs to PDF
jpeg2pdf.exe *.jpg -o "%%~nG".pdf
set fname=%%G
ps2pdf -dPDFSETTINGS#/ebook "%%~nG".pdf "%%~nG"compressed.pdf
popd )
echo Ended
pause
这里是一个例子,你的脚本,与所需的 Call
为您 ps2pdf.bat
文件。
在运行它之前,请为您的可执行工具替换正确的完整路径。jpeg2pdf.exe
, (行 14
)脚本 ps2pdf.bat
, (行 15
). 依靠可修改的注册表或环境变量不是一个好主意,因此我建议使用它们的完整路径。如果这两个文件总是位于这个批处理文件的目录下,或者相对于这个批处理文件而言,可以随意使用 %~dp0
来指定这些路径。
@Echo Off
SetLocal DisableDelayedExpansion
Set "records=%UserProfile%\Documents\0 BDHS Digitised records\Awaiting processing"
Set "fname="
If Exist "%records%\" (
For /R "%records%" %%G In (*.jpg) Do (
SetLocal EnableDelayedExpansion
If Not "!fname!" == "%%~dpG" (
EndLocal
Set "fname=%%~dpG"
For %%H In ("%%~dpG.") Do (
Rem Merge JPGs to PDF
"P:\athTo\EXE\jpeg2pdf.exe" "%%~dpG*.jpg" -o "%%~dpG%%~nxH.pdf"
Call "P:\athTo\ps2pdf.bat" -dPDFSETTINGS#/ebook "%%~dpG%%~nxH.pdf" "%%~dpG%%~nxHcompressed.pdf"
)
) Else EndLocal
)
Echo Ended.
) Else Echo Directory %records% dos not exist.
Pause
上面的例子,已经变得更有效率,因为只递归通过包含有 .jpg
扩展。
然而,该脚本并没有使用 PushD
和 PopD
你的也是如此。虽然这可能是效率上的一个小改进,但它可能会带来另一个问题。由于我不知道你们的工具,如果它们只接受有限长度的命令行或路径,这个版本可能会阻塞。