4

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

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

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

4

3 回答 3

3

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

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

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

EG,类似

for %s in (*.ps) do ECHO %s >> filename.lst
gswin64c.... @filename.lst
于 2012-09-23T08:47:27.550 回答
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

我读到(刚刚在其他地方)%%s在 MS-DOS 批处理文件中工作(而不是%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 文件的许多页面(根据问题)。

于 2013-01-17T18:17:32.180 回答
0

作为 for 循环的替代方案

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

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

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

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

于 2013-09-29T18:10:51.013 回答