windows - bat 文件、函数和插入符号

标签 windows batch-file cmd

这是怎么回事?

helper.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^^^^^^^^^^^^^^^^"

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

关于windows - bat 文件、函数和插入符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17701315/

相关文章:

windows - 在控制面板 -> 声音中添加我自己的应用程序事件

带通配符的 Windows REN 命令不起作用

.net - F# 环境集成(用于脚本)

c++ - 内存中无符号字符加密

C: 为什么当我的处理器速度是 3.10GHz 时 CLOCKS_PER_SEC 打印 1000

c++ - 与遗留 TCHAR 代码接口(interface)的正确样式

windows-7 - 没有/d为什么不能在命令行中启动程序? (Windows 7x64)

windows - vbs中如何传递包含空格的参数

windows - 任务计划程序无法识别调用 .bat

Windows 命令行 : automatically type in a command from . cmd 文件