如何在Windows cmd中正确使用变量替换?

时间:2019-06-03 14:24:21

标签: windows cmd command-line-arguments

我正在使用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 这样就可以正常工作,并将具有扩展名的文件路径复制到剪贴板。

我真的很困,因为我不明白自己在做什么错。请帮助我。

无错误消息。完全没有消息。什么都没发生。

1 个答案:

答案 0 :(得分:0)

实际上,从上下文菜单中拧紧Shell命令时只有很少的变量可用。
更多信息在https://superuser.com/a/473602中。

因此,唯一的方法是使用上述代码创建批处理文件:

C:\Program Files (x86)\gs\gs9.27\bin\gswin32c.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="%~dpn1-processed.pdf" -c .setpdfwrite -f "%~1"

并添加以下命令REG_SZ行,而不是直接放置命令:

"Path_to_bat_file/file_name.bat" "%1"

它应该可以工作。