批量ps2pdf失败

问题描述 投票:0回答:1

我仍然没有解决为什么这段代码能正确地运行所有的子文件夹,寻找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
windows batch-file
1个回答
0
投票

这里是一个例子,你的脚本,与所需的 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 扩展。

然而,该脚本并没有使用 PushDPopD你的也是如此。虽然这可能是效率上的一个小改进,但它可能会带来另一个问题。由于我不知道你们的工具,如果它们只接受有限长度的命令行或路径,这个版本可能会阻塞。

© www.soinside.com 2019 - 2024. All rights reserved.