首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在使用ghostscript时,如何使用不带扩展名的输入文件名附加输出文件名?

在使用ghostscript时,如何使用不带扩展名的输入文件名附加输出文件名?
EN

Stack Overflow用户
提问于 2019-05-17 17:46:46
回答 2查看 648关注 0票数 0

我使用GS用2次点击“压缩”PDF。我已经用上述代码在windows register中添加了一个上下文菜单。

例如,如果我在test.pdf上使用它,输出文件将是test.pdf-compressed.pdf。它可以工作,但是我想去掉文件名中的扩展名。有没有办法做到这一点?

我尝试使用cmd参数,但它似乎不适用于postscript。

C:\Program Files\gs\gs9.27\bin\gswin64c.exe -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dCompatibilityLevel=1.4 -sOutputFile=%1%-compressed.pdf -c .setpdfwrite -f %1

EN

回答 2

Stack Overflow用户

发布于 2019-05-17 18:55:44

这不是Ghostscript问题。如果参数正确,那么传递给Ghostscript的参数将是正确的,并且输出文件将是您想要的。

你没有说出你尝试过的东西,所以很难给出建议。但是,您应该能够使用%~dp1和/或%~n1,而不是简单地使用%1来展开到路径或文件。还有其他变体,在Windows命令行中键入"help for“将提供更多详细信息。

请一如既往地注意,Ghostscript不会压缩PDF文件,通过使用-dPDFSETTINSG=/ebook,您正在生成一个全新的PDF文件,它改变了原始文件的内容(例如,图像将被下采样)。

而且sequence -c .setpdfwrite -f多年来一直是多余的,你不需要它。

编辑

此批处理文件演示了如何在批处理文件中使用命令shell变量扩展

代码语言:javascript
运行
复制
@ECHO OFF
ECHO Input file is %1
ECHO Input directory is %~dp1

\ghostpdl\debugbin\gswin32c -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=%~dp1\new.pdf %1

当另存为test.bat,然后测试d:\temp\input.ps时,将生成以下输出:

代码语言:javascript
运行
复制
Input file is d:\temp\input.ps
Input directory is d:\temp\
GPL Ghostscript GIT PRERELEASE 9.28 (2019-04-04)
Copyright (C) 2019 Artifex Software, Inc.  All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.

并在目录d:\ new.pdf中创建了一个临时文件

因此,变量扩展按预期工作,因为它发生在命令行执行之前。

如果它仍然对你不起作用,那么你将不得不提供更多的信息。首先,我会从命令行中删除-dNOPAUSE和-dBATCH开关,这样您就可以知道Ghostscript是否在试图告诉您一些信息。

票数 1
EN

Stack Overflow用户

发布于 2020-10-31 07:24:47

很明显,我偶然发现这篇文章有点晚了。然而,我想把我的答案发布出来,以防将来有人来寻找类似问题的解决方案。

我首先在我的桌面上创建了一个新文件夹,标题为"PDF",我在其中放置了"test.pdf“文件。然后,我创建了一个标题为"CompressPDF.bat“的.BAT文件,并在其中添加了下面的脚本。

此脚本将循环通过并压缩任何/所有.PDF文件,这些文件放在"PDF“文件夹中。然后,根据OP的请求,它正确地将"-compressed.pdf“字符串附加到文件名中,从而将"test.pdf”文件保存为“test-COMPRESED.pdf”。

正如您将注意到的,我在脚本的最后添加了"PAUSE“命令。这将防止窗口自动关闭,直到您按任何键,这将允许您检查在压缩过程中可能出现的任何错误。

代码语言:javascript
运行
复制
@echo off
cd "%USERPROFILE%\Desktop\PDF"
for %%f in (*.pdf) do (
    gswin64c.exe -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="%%~nf-compressed.pdf" "%%f"
)
PAUSE

我希望这篇文章能够帮助其他可能正在寻找类似问题的答案的人。

请随时回复或联系我,如果有人有任何问题,因为我总是很乐意帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56183821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档