Ghostscript:如何在Windows上将PDF与通配符合并

时间:2012-09-23 08:29:04

标签: ghostscript

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

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

这对我来说非常适合Linux,但是当我在Windows上运行它时 我得到了**Error: /undefinedfilename in *.pdf.**。 请有人帮我这个。

3 个答案:

答案 0 :(得分: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文件的许多页面(根据问题)。

答案 1 :(得分:2)

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

为什么它适用于Linux?因为您正在使用的shell在将命令行传递给Ghostscript之前将'* .ps'扩展为的完整文件列表。

要在Windows中执行此操作,您需要执行shell脚本,将文件名传递给文件,然后将该文件作为参数提供给GS。

EG,类似

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

答案 2 :(得分:0)

作为for循环的替代

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

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

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

很抱歉挑起这个有一年历史的帖子,这帮我解决了我的问题,但我认为使用'dir'更容易,更灵活,不需要你在开始之前删除文件列表。< / em>的