协慌网

登录 贡献 社区

通过 Windows 批处理文件将长命令拆分为多行

如何在批处理文件中的多行上拆分长命令?

答案

只要您记得插入符号和其后的换行符已完全删除,就可以用插入符号^因此,如果您在换行的地方应该有一个空格,请加上一个空格。 下面有更多内容。

例子:

copy file1.txt file2.txt

将被写为:

copy file1.txt^
 file2.txt

插入符号的规则是:

在行的末尾插入一个尖号,追加下一行,追加的行的第一个字符将被转义。

您可以多次使用插入符号,但是完整的行不能超过〜8192 个字符的最大行长(Windows XP,Windows Vista 和 Windows 7)。

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^没有空格,并且在下一行的开头没有空格。因此,当删除^和换行符时,您会得到... xcopy 。)

为了提高可读性和完整性,最好只在两个参数之间打断(一定要包括空格)。

确保^不是批处理文件中的最后一项,因为似乎存在主要问题