使用批处理文件中的 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
并查看最后两页以获取有关此语法的更多信息。
我有几(千)个多页 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
并查看最后两页以获取有关此语法的更多信息。