2

怎么回事?

助手.bat

@echo off
echo %1
call:foo %1
goto:eof

:foo
echo %1
goto:eof

像下面这样运行我们的脚本

帮手“^^^^”

输出

“^^^^”

“^^^^^^^^”

为什么?我知道 '^' 符号在 cmd.exe 的情况下是特殊的,但是这里发生了什么?函数调用如何影响它?

4

1 回答 1

3

CALL在这种情况下很特别!

批处理解析器有不同的阶段,在特殊字符阶段,不带引号的插入符号用于转义下一个字符,插入符号本身被删除。
在您的情况下,插入符号被引用,因此它们不会受到影响。

然后插入符号可以在延迟扩展阶段再次受到影响,但引号在那里没有特殊含义,插入符号仅用于转义感叹号。

通常在延迟阶段完成后,但如果你使用CALL所有插入符号,则加倍
通常这是不可见的,因为CALL还会重新启动解析器,并且在特殊字符阶段再次删除插入符号。
但是在您的情况下,它们被引用,因此它们保持加倍。

尝试这个

call call call call echo a^^ "b^"

输出

a^ "b^^^^^^^^^^^^^^^^"

解析器在 Windows 命令解释器 (CMD.EXE) 如何解析脚本?

于 2013-07-17T14:11:20.443 回答