我正在尝试合并目录中的所有 *.pdf :
gswin64c -q -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=Total_Files.pdf -dBATCH *.pdf
这在 Linux 上对我来说非常有用,但是当我在 Windows 上运行它时,我得到了**Error: /undefinedfilename in *.pdf.**
. 请有人帮我解决这个问题。
我正在尝试合并目录中的所有 *.pdf :
gswin64c -q -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=Total_Files.pdf -dBATCH *.pdf
这在 Linux 上对我来说非常有用,但是当我在 Windows 上运行它时,我得到了**Error: /undefinedfilename in *.pdf.**
. 请有人帮我解决这个问题。
之前有一个关于这个主题的问题,答案是一样的,Ghostscript 不允许在输入文件名中使用通配符,你必须指定你想要的每个文件作为输入。
为什么它可以在 Linux 上运行?因为您使用的 shell在将命令行传递给 Ghostscript之前会将“*.ps”扩展为完整的文件列表。
要在 Windows 中执行此操作,您需要执行 shell 脚本,将文件名通过管道传输到文件,然后将文件作为参数提供给 GS。
EG,类似
for %s in (*.ps) do ECHO %s >> filename.lst
gswin64c.... @filename.lst
(我的问题几乎完全相同)。我的解决方案(在以前的答案的帮助下)稍微更好地回答了原始问题(下面是一个实际的 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 文件的许多页面(根据问题)。
作为 for 循环的替代方案
dir /b /o:n *.ps > filename.lst
完成工作(/b 仅获取文件,/o:n 按名称排序)。
要彻底解决排序问题,可以将前 9 个文件重命名为 01->09,或者在记事本中打开输出文件,手动处理这几种情况。但是,如果您将拥有超过 100 个文件,这可能会很麻烦。
很抱歉挑起这个一年前的帖子,它帮助我解决了我的问题,但我认为使用 'dir' 更容易、更灵活,并且不需要您在开始之前删除文件列表。