怎么回事?
助手.bat
@echo off
echo %1
call:foo %1
goto:eof
:foo
echo %1
goto:eof
像下面这样运行我们的脚本
帮手“^^^^”
输出
“^^^^”
“^^^^^^^^”
为什么?我知道 '^' 符号在 cmd.exe 的情况下是特殊的,但是这里发生了什么?函数调用如何影响它?
怎么回事?
助手.bat
@echo off
echo %1
call:foo %1
goto:eof
:foo
echo %1
goto:eof
像下面这样运行我们的脚本
帮手“^^^^”
输出
“^^^^”
“^^^^^^^^”
为什么?我知道 '^' 符号在 cmd.exe 的情况下是特殊的,但是这里发生了什么?函数调用如何影响它?
CALL
在这种情况下很特别!
批处理解析器有不同的阶段,在特殊字符阶段,不带引号的插入符号用于转义下一个字符,插入符号本身被删除。
在您的情况下,插入符号被引用,因此它们不会受到影响。
然后插入符号可以在延迟扩展阶段再次受到影响,但引号在那里没有特殊含义,插入符号仅用于转义感叹号。
通常在延迟阶段完成后,但如果你使用CALL
所有插入符号,则加倍。
通常这是不可见的,因为CALL
还会重新启动解析器,并且在特殊字符阶段再次删除插入符号。
但是在您的情况下,它们被引用,因此它们保持加倍。
尝试这个
call call call call echo a^^ "b^"
输出
a^ "b^^^^^^^^^^^^^^^^"