【问题标题】:Ghostscript: how to merge PDFs with wild card on WindowsGhostscript:如何在 Windows 上将 PDF 与通配符合并
【发布时间】:2012-09-23 08:29:03
【问题描述】:

我正在尝试合并目录中的所有 *.pdf :

gswin64c -q -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=Total_Files.pdf -dBATCH *.pdf

这在 Linux 上非常适合我,但是当我在 Windows 上运行它时 我收到**Error: /undefinedfilename in *.pdf.**。 请有人帮我解决这个问题。

【问题讨论】:

    标签: ghostscript


    【解决方案1】:

    之前有一个关于这个话题的问题,答案是一样的,Ghostscript 不允许在输入文件名中使用通配符,你必须指定你想要的每个文件作为输入。

    为什么它可以在 Linux 上运行?因为您使用的 shell 将“*.ps”扩展为文件的完整列表将命令行传递给 Ghostscript。

    要在 Windows 中执行此操作,您需要执行 shell 脚本,将文件名通过管道传输到文件,然后将文件作为参数提供给 GS。

    EG,类似

    for %s in (*.ps) do ECHO %s >> filename.lst
    gswin64c.... @filename.lst
    

    【讨论】:

    • 感谢您的回答。我已经尝试过这个解决方案并且它有效。
    • 唯一的问题 filename.lst 未排序。它对文件名进行排序,如 varchar 1、10、11、2、20 等。
    • 您先生,2021 年您仍然是救命稻草。谢谢!
    【解决方案2】:

    (我的问题几乎完全相同)。我的解决方案(在以前的答案的帮助下)稍微更好地回答了原始问题(下面是一个实际的 MS-DOS 示例)

    del filename.lst
    for %%s in (C:\somefolder\some?wildcards*.pdf) do ECHO %%s >> filename.lst
    gswin64c.... @filename.lst
    

    解释一下;

    '>>' 表示在 MS-DOS 中追加 - 所以首先我们删除文件 filename.lst

    我读到(刚刚在其他地方)MS-DOS 批处理文件中的%%s 有效(而不是%s)。显然 - 有一天文件名可能包含空格(就像我的那样),所以最好安全并引用文件名。所以更好的批处理文件是;

    del filename.lst
    for %%s in (C:\somefolder\some?wildcards*.pdf) do ECHO "%%s" >> filename.lst
    gswin64c.... @filename.lst
    

    现在我只是用它来输入许多 EPS 文件 - 但许多 PDF 文件也可以正常工作;就像上面的例子一样——我实际上用这两种方法测试了它——我的结果是一个包含许多 EPS 文件的 PDF——以及一个 PDF 中多个 PDF 文件的许多页面(根据问题)。

    【讨论】:

      【解决方案3】:

      作为 for 循环的替代方法

      dir /b /o:n *.ps > filename.lst
      

      完成工作(/b 仅获取文件,/o:n 按名称排序)。

      为了彻底解决排序问题,你可以将前9个文件重命名为01->09,或者在记事本中打开输出文件,手动处理这几种情况。但如果您有超过 100 个文件,这可能会很麻烦。

      很抱歉挑起这个一年前的帖子,它帮助我解决了我的问题,但我认为使用 'dir' 更容易、更灵活,并且不需要您在开始之前删除文件列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-23
        • 1970-01-01
        • 2018-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多