bat文件,函数和插入符号

时间:2013-07-17 13:38:01

标签: windows batch-file cmd

什么事情正在发生?

helper.bat

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

:foo
echo %1
goto:eof

运行我们的脚本,如下所示

帮助者“^^^^”

输出

“^^^^”

“^^^^^^^^”

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

1 个答案:

答案 0 :(得分:3)

在这种情况下,

CALL非常特别!

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

然后,在延迟扩展阶段,插入符号会再次受到影响,但引号并没有特别的含义,插入符只用于逃避感叹号。

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

试试这个

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

输出

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

解析器在How does the Windows Command Interpreter (CMD.EXE) parse scripts?

解释