转义批处理伪变量

转义批处理伪变量

我需要调用一个批处理文件,其中包含我希望它执行的命令。此命令包含 %cd% 伪变量,该变量扩展到当前目录。比如说,我想运行test "echo %cd%"。问题是在被调用%cd%之前扩展了。test

通常,您可以通过将百分号加倍来​​转义变量,但这似乎不适用于伪变量。例如,echo %%ProgramFiles%%将打印%ProgramFiles%,但echo %%errorlevel%%将打印%0%。我该怎么办?

答案1

Windows 命令提示符中的通用转义字符(\宇宙其他地方的类似物)是插入符号 ( ^)。尝试“ ^%cd^%”。

(编辑)

… 进而,

回显%1> temp.bat
调用 temp.bat
删除临时文件

是的,它太丑了,确实应该有更好的方法。但是,我找不到。

答案2

如果没有 CALL 参与,我的运气也不太好。使用这个 test.bat:

@%*

调用test.bat 调用 echo ^%cd^%工作正常。或者,将 CALL 放在 test.bat 中:

@CALL %*

并调用测试.bat echo ^%cd^%有效。(无论如何这更安全,因为如果 test.bat 被另一个脚本调用,那么将脚本传递给它不会有过早退出的风险。)

我认为哪种方法更适合您(或者哪种方法都可以起作用)取决于您具体的情况。

相关内容