Windows 为什么CMD转义字符使用魔法而不是转义新行

Windows 为什么CMD转义字符使用魔法而不是转义新行,windows,batch-file,cmd,Windows,Batch File,Cmd,我尝试执行简单的脚本: set list="a",^ "b",^ c echo %list% 输出是 "a","b",a","b",^ 虽然我希望它是“a”,“b”,c。 引号似乎破坏了一切,因为如果b没有引号,一切都正常。对我来说,这也是一个谜,为什么它只在第二条新的逃生路线上断开 那么,为什么输出如此奇怪呢? 我试着在Windows7上启动脚本,如果它重要的话有趣的问题!似乎当^放在行尾时,下一行的第一个字符不会被解析,而是直接插入到结果中,而不会被解析器处理。如果这样的字符必须是平衡

我尝试执行简单的脚本:

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

echo %list%
输出是

"a","b",a","b",^
虽然我希望它是“a”,“b”,c。 引号似乎破坏了一切,因为如果b没有引号,一切都正常。对我来说,这也是一个谜,为什么它只在第二条新的逃生路线上断开

那么,为什么输出如此奇怪呢?
我试着在Windows7上启动脚本,如果它重要的话

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

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

set list="a",^
 "b",^
 c
。。。或移动逗号:

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

。。。或者只是删除引号(正如您已经测试过的)。

正如Aacini所说,多行插入符号删除第一行输入,并转义下一个字符。
这通常用于创建包含换行符的变量

set LF=^


REM Two empty lines here creates a line feed in LF.
为了避免角色转义,可以使用重定向(显然)


set list=“a”,奇数-在我的机器上,也使用Win7,它将
list
设置为
“a”、“b”^
,并尝试执行
c
。由于
list
终止
^
,因此
echo
生成
“a”、“b”和
,后跟
echo
后面的行内容。…@Magoo您知道为什么它会将list设置为“a”、“b”和“^”?为什么它不将第二个“^”计算为转义字符,而将第一个“^”计算为转义字符?在我的机器上,如果set后面没有echo(或者至少是verbose),它会尝试执行c,我不知道在这种情况下它的行为也会有所不同。
set list="a",<nul ^
"b",^
c

echo %list%