我需要调用一个批处理文件,其中包含我希望它执行的命令。此命令包含 %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 被另一个脚本调用,那么将脚本传递给它不会有过早退出的风险。)
我认为哪种方法更适合您(或者哪种方法都可以起作用)取决于您具体的情况。