我有几个(千)个多页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
答案 0 :(得分:1)
您可以根据PDF的名称设置输出文件的名称,而不是使用唯一文件名的计数器。
@echo off
setlocal
for %%I in (*.pdf) do (
gswin64 -dNOPAUSE -dBATCH -sDEVICE=jpeg -r144 -sOutputFile="%%~nI_p%%02d.jpg" "%%~I"
)
%%~nI
获取基本名称,不包含每个PDF的扩展名。 "%%~I"
只是确保包含空格的文件名不会破坏。在控制台窗口中输入help for
,查看最后两页,了解有关此语法的更多信息。
答案 1 :(得分:0)
好的,在@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
)