【发布时间】:2019-10-19 02:58:39
【问题描述】:
我正在使用 Ghost Script 来操作 PDF。我使用数字变量作为参数。我的输入文件名是“x.pdf”。我希望输出文件为“x-processed.pdf”。目前我有上面提到的代码:
gswin64c.exe -q -dNOPAUSE -dBATCH -dSAFER -dPDFA=2 -dPDFACompatibilityPolicy=1 -dSimulateOverprint=true -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dEmbedAllFonts=true -dSubsetFonts=true -dAutoRotatePages=/None -dColorImageDownsampleType=/Bicubic -dColorImageResolution=150 -dGrayImageDownsampleType=/Bicubic -dGrayImageResolution=150 -dMonoImageDownsampleType=/Bicubic -dMonoImageResolution=150 -sOutputFile=%1%-processed.pdf -c .setpdfwrite -f %1
所以输出文件名当前是inputfilename.pdf-processed.pdf。
我想删除那个扩展。但我不知道怎么做。
我在这里尝试使用变量替换形式:http://cplusplus.bordoon.com/cmd_exe_variables.html
也就是说,我把-sOutputFile=%1-processed.pdf改成了-sOutputFile=%~pn1-processed.pdf
那没用。
所以我首先尝试研究如何使用这些替换。我尝试通过 regedit 添加此命令,将选定的文件名复制到剪贴板:
cmd.exe echo "%~n1"|clip
那是行不通的。
但如果我简单地说:
cmd.exe /c echo "%1"|clip
这可以正常工作并将带有扩展名的文件路径复制到剪贴板。
我真的被困住了,因为我不明白我在这里做错了什么。请帮帮我。
没有错误消息。根本没有消息。什么都没有发生。
【问题讨论】:
-
-sOutputFile=%1%-processed.pdf -c .setpdfwrite -f %1转换为-sOutputFile=%11,因为变量%-processed.pdf -c .setpdfwrite -f %为空。 (换句话说,你的%太多了) -
事实上它适用于 %1% 和 %1。但我不使用 %~pn1 ,这就是问题所在。我想在重命名时摆脱文件扩展名。
-
"事实上,它对 %1% 和 %1 都有效" - 它没有。尝试
echo <your whole line>与sOutputFile=%1%-processed.pdf和sOutputFile=%1-processed.pdf并比较输出。 -
很抱歉,但我不知道这条线在 echo 下应该是什么样子。你介意精确一下吗?我认为它不应该工作。但从技术上讲,它会在 %1% 和 %1 两种情况下创建一个新的 pdf。这很奇怪,但我已经测试过,两者都做同样的事情。问题更多的是为什么 %~dn1 不起作用?
-
您使用了错误的术语。打开命令提示符窗口并运行
set /?。输出帮助解释了如何使用环境变量进行替换。您要使用的是使用修饰符引用批处理文件的第一个参数。在 cmd 窗口中运行的帮助输出call /?解释了如何执行此操作。%~pn1表示第一个参数的路径和名称,没有驱动器和文件扩展名。我建议使用-sOutputFile="%~dpn1-processed.pdf" -c .setpdfwrite -f "%~1",即使在调用具有糟糕文件名"Test & Example_#1!.pdf"的批处理文件时也绝对有效。
标签: windows cmd command-line-arguments