【问题标题】:Trouble converting multiple PDF files to JPEG files using Ghostscript from a batch file使用批处理文件中的 Ghostscript 将多个 PDF 文件转换为 JPEG 文件时遇到问题
【发布时间】:2015-03-01 05:14:03
【问题描述】:

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

【问题讨论】:

  • 所以gswi64.exe-sOutputFile 参数中使用百分号作为通配符?如果您从 .bat 脚本执行此操作,您可能需要双泵 % 以便将其视为文字百分号,而不是脚本参数或变量。试试-sOutputFile=p%%03d.jpg
  • @rojo 很好用,谢谢!我仍然需要找到一种方法来更改循环的每次迭代中的文件头,这样我就不会覆盖文件,但这是很好的第一步。

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


【解决方案1】:

好的,在 @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
)  

【讨论】:

    【解决方案2】:

    您可以根据 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 并查看最后两页以了解有关此语法的更多信息。

    【讨论】:

      猜你喜欢
      • 2017-08-05
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多