为什么CMD转义角色会做魔术而不是逃避新行

时间:2016-02-10 07:50:42

标签: windows batch-file cmd

我尝试执行简单的脚本:

set list="a",^
"b",^
c

echo %list%

输出

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

虽然我预计它是“a”,“b”,c。 似乎引号破坏了一切,因为如果b没有它们,一切正常。对我来说,为什么它只会在第二次新线逃脱时才会破裂,这也很神秘。

那么,为什么输出如此奇怪? 我试图在Windows 7上启动脚本,如果重要的话

2 个答案:

答案 0 :(得分:2)

有趣的问题!似乎当^放在行尾时,下一行中的第一个字符解析,但字面上插入结果而不处理由解析器。如果必须平衡这样的字符(如引号或括号),那么这会导致奇怪的“错误”,否则会与“不平衡的字符”相关联。

如果更改第一个字符。在^之后的行中,问题消失了。例如,插入空格:

set list="a",^
 "b",^
 c

...或移动逗号:

set list="a"^
,"b"^
,c

...或者只是删除引用(如您已经测试过的那样)。

答案 1 :(得分:1)

正如Aacini所说,多线插入符号移除了第一个换行符并逃脱了下一个字符 这通常用于创建包含换行符的变量。

set LF=^


REM Two empty lines here creates a line feed in LF.

为了避免角色的转义,您可以使用重定向(显然)。

set list="a",<nul ^
"b",^
c

echo %list%

更多关于插入符号和SO:Long commands split over multiple lines..

处的多线行为

关于Dostips:Comments without increasing macro size

处多线插入符号的重定向效果