Ghostscript如何在Windows上使用通配符合并PDF文件

4
我正在尝试合并目录中的所有*.pdf文件:
gswin64c -q -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=Total_Files.pdf -dBATCH *.pdf

这在Linux上完全适用,但是在Windows上运行时出现了**Error: /undefinedfilename in *.pdf.**的错误。请问有人能帮我解决这个问题吗?

3个回答

3

我的问题实际上和原问题几乎完全相同。我的解决方案(在之前的答案帮助下)稍微更好地回答了原始问题(以下是一个实际的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(如问题所述)。


2

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

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

要在Windows上执行此操作,您需要执行一个shell脚本,将文件名导出到一个文件中,然后将该文件作为GS的参数提供。

例如,类似以下的内容:

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

谢谢您的回答。我尝试了这个解决方案,它有效。 - klipa
唯一的问题是 filename.lst 文件未排序。它按照 varchar 1、10、11、2、20 等文件名进行排序。 - klipa
您先生,在2021年仍然是救星。谢谢! - Yorbjörn

0
作为 for 循环的替代方案
dir /b /o:n *.ps > filename.lst

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接