echo Test1
echo one ^
two ^
three ^
four^
*
--- Output ---
Test1
one two three four*
echo Test2
echo one & echo two
--- Output ---
Test2
one
two
echo Test3
echo one & ^
echo two
--- Output ---
Test3
one
two
echo Test4
echo one ^
& echo two
--- Output ---
Test4
one & echo two
要禁止转义下一个字符,可以使用重定向 .
重定向必须在插入符号之前 . 但是在插入符号之前存在一个重定向的好奇心 .
如果您在插入符号处放置令牌,则会删除该令牌 .
echo Test5
echo one <nul ^
& echo two
--- Output ---
Test5
one
two
echo Test6
echo one <nul ThisTokenIsLost^
& echo two
--- Output ---
Test6
one
two
并且还可以 embed line feeds 进入字符串:
setlocal EnableDelayedExpansion
set text=This creates ^
a line feed
echo Test7: %text%
echo Test8: !text!
--- Output ---
Test7: This creates
Test8: This creates
a line feed
5 回答
多个命令可以放在括号中并分布在多个行中;所以像
echo hi && echo hello
这样的东西可以像这样:变量也可以帮助:
另外我注意到了#336016_,只有在有空格的情况下
if
条件才喜欢它们:然而,似乎在for循环的值的中间分割不需要插入符号(实际上尝试使用一个将被视为语法错误) . 例如,
请注意,在hello之后或再见之前甚至不需要空格 .
只要您记住插入符号及其后面的换行符被完全删除,您就可以使用插入符号
^
分解长行 . 因此,如果应该有一个空间,你要打破线,包括一个空格 . (More on that below.)例:
将写成:
插入符号的规则是:
在行尾的插入符号附加下一行,附加行的第一个字符将被转义 .
您可以多次使用插入符号,但完整的行不得超过〜8192个字符的最大行长度(Windows XP,Windows Vista和Windows 7) .
要禁止转义下一个字符,可以使用重定向 .
重定向必须在插入符号之前 . 但是在插入符号之前存在一个重定向的好奇心 .
如果您在插入符号处放置令牌,则会删除该令牌 .
并且还可以 embed line feeds 进入字符串:
空行对于成功至关重要 . 这仅适用于延迟扩展,否则换行后将忽略该行的其余部分 .
它起作用,因为行末端的插入符号忽略下一个换行符并转义下一个字符,即使下一个字符也是换行符(在此阶段总是忽略回车符) .
(这基本上是Wayne's answer的改写,但是由于插入符号的混乱被清除了 . 所以我对编辑答案并不害羞,但 completely rewriting them 似乎不合适 . )
您可以使用插入符分隔长行(
^
),只需记住插入符号及其后面的换行符将完全从命令中删除,因此如果您将其放在需要空格的位置(例如参数之间),请一定要包括空格(在_336000之前,或者在下一行的开头 - 后一个选择可能有助于使它更清晰,这是一个延续) .示例:(所有在Windows XP和Windows 7上测试过)
可以写成:
要么
甚至
(最后一步是因为
xc
和^
之间没有空格,下一行开头没有空格 . 所以当你删除^
和换行符时,你得到......xcopy
. )为了便于阅读和理智,最好只在参数之间进行分解(确保包含空格) .
确保
^
是 not 批处理文件中的最后一件事,因为appears to be a major issue with that .