在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 。)

为了便于阅读和理智,最好在参数之间打破(确保包含空格)。

确保^ 不是批处理文件中的最后一件事,因为这似乎是一个主要问题。

链接地址: http://www.djcxy.com/p/16433.html

上一篇: Long commands split over multiple lines in Windows Vista batch (.bat) file

下一篇: Make change to a git submodule, and keep the changes