我必须通过CALL语句执行批处理文件并将参数传递给它。一切正常,直到我需要使用^符号。
我正在运行XP,可以通过两个简单的命令重现问题:
没有CALL
c:\>echo password: "secret(<^>)secret"
password: "secret(<^>)secret"
使用CALL
c:\>call echo password: "secret(<^>)secret"
password: "secret(<^^>)secret"
使用CALL时如何避免不复制^符号?
答案 0 :(得分:2)
通过这种方式你无法避免它,因为CALL
将在第二次重新分配线之前将所有插入符号加倍。
如果你真的需要使用CALL
,你应该把你的数据放在一个变量中,并在CALL-caret-doubleling之后展开它
set "myVar=secret(<^>)secret"
set myVar
call echo Password "%%myVar%%"
但即便如此,如果您的秘密包含引号,或者您尝试使用不带引号的变量,那么您会遇到问题。
因此,您最好在这里使用延迟扩展 这也可以在括号内工作(没有CALL)。
setlocal EnableDelayedExpansion
(
set "myVar=secret(<^>)secret"
echo !myVar!
)
如果你对双重插入符来自哪里感兴趣,你可以阅读 How does CMD.EXE parse scripts