在Windows Vista批处理文件(.bat)中,长命令分成多行
如何在Windows(Vista)批处理文件中使长命令遍历多行?
您可将长行与插入符号^
只要你记住,插入符和它后面的换行符被完全去除。 所以,如果应该有一个空间,你打破了路线,包括一个空间。 (更多关于下面的内容。)
例:
copy file1.txt file2.txt
会写成:
copy file1.txt^
file2.txt
脱字符的规则是:
在行尾有一个插入符号,追加下一行,附加行的第一个字符将被转义。
您可以多次使用插入符号,但完整行不得超过〜8192个字符(XP / Vista / Win7)的最大行长度。
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
也可以将换行符嵌入到字符串中
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
空行对成功很重要。
这只适用于延迟扩展,否则在换行后忽略该行的其余部分。
它的工作原理是,行尾的插入符号忽略下一个换行符并转义下一个字符,即使下一个字符也是换行符(回车在此阶段始终被忽略)。
(这基本上是对Wayne的回答的重写,但是对于脱字符的解释混乱了,所以我把它作为CW发布了,我并不害怕编辑答案,但完全重写它们似乎不合适。)
你可以用插入符号( ^
)分开很长的一行,只要记住脱字符和它后面的换行符完全从命令中删除,所以如果你把它放在需要空格的地方(比如参数之间),可以一定要包括这个空间(在^
之前或者在下一行的开头 - 后一个选择可能有助于使它更清晰,这是一个延续)。
示例:(全部在Windows XP和Windows 7上测试过)
xcopy file1.txt file2.txt
可以写成:
xcopy^
file1.txt^
file2.txt
要么
xcopy ^
file1.txt ^
file2.txt
甚至
xc^
opy ^
file1.txt ^
file2.txt
(最后的作品是因为xc
和^
没有空格,下一行开头没有空格,所以当你删除^
和newline时,你会得到... xcopy
。)
为了便于阅读和理智,最好在参数之间打破(确保包含空格)。
确保^
不是批处理文件中的最后一件事,因为这似乎是一个主要问题。
上一篇: Long commands split over multiple lines in Windows Vista batch (.bat) file