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