无法使用批处理文件中的Ghostscript将多个PDF文件转换为JPEG文件

时间:2015-01-02 22:42:46

标签: batch-file pdf for-loop type-conversion ghostscript

我有几个(千)个多页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

2 个答案:

答案 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
)