使用批处理文件中的 Ghostscript 将多个 PDF 文件转换为 JPEG 文件时遇到问题

Trouble converting multiple PDF files to JPEG files using Ghostscript from a batch file

我有几(千)个多页 PDF 文件,我正尝试使用 Ghostscript 将其转换为 JPEG 文件(每个 PDF 的每一页对应一个文件)。我有以下批处理文件,但我无法让它正常工作。

for %%f in (*.pdf) do (
  gswin64.exe -dNOPAUSE -dBATCH -sDEVICE=jpeg -r144 -sOutputFile=p%03d.jpg %%f
)

从打开文件的角度来看,循环似乎工作正常。 "p%03d.jpg" 出错了——我猜循环看到“%0”并出于某种原因插入了批处理文件的名称。我收到以下错误:

**** Could not open the file pC:\Users\bmjones\Downloads\convert.bat3d.jpg

("convert.bat"是批处理文件的名称)

我猜即使我让它工作,我也会遇到另一个问题。当我手动运行时:

gswin64.exe -dNOPAUSE -dBATCH -sDEVICE=jpeg -r144 -sOutputFile=p%03d.jpg [file name].pdf

它工作正常。我得到一组文件名 001.jpg、002.jpg 等。但我希望它们的编号不同。所以,如果我的前两个文件分别有 3 页和 2 页,我想有这样的东西:

f1_pg1.jpg, f1_pg2.jpg, f1_pg3.jpg, f2_pg1.jpg, f2_pg2.jpg

好的,在@rojo 的帮助下,我想我已经明白了(我当然愿意接受更好的解决方案)

set /a c=0
setlocal ENABLEDELAYEDEXPANSION
for %%f in (*.pdf) do (
    set /a c=c+1
    set FNAME=f_!c!_p%%02d.jpg
    gswin64.exe -dNOPAUSE -dBATCH -sDEVICE=jpeg -r144 -sOutputFile=!FNAME! %%f
)  

您可以根据 PDF 的名称设置输出文件的名称,而不是使用唯一文件名的计数器。

@echo off
setlocal

for %%I in (*.pdf) do (
    gswin64 -dNOPAUSE -dBATCH -sDEVICE=jpeg -r144 -sOutputFile="%%~nI_p%%02d.jpg" "%%~I"
)

%%~nI 获取每个 PDF 的不带扩展名的基本名称。 "%%~I" 只是确保包含空格的文件名不会破坏内容。在控制台 window 中输入 help for 并查看最后两页以获取有关此语法的更多信息。