如何在批处理文件中的多行上拆分长命令?
您可将长线,插入符号^
,只要你记住,插入符和它后面的换行符被完全去除.所以,如果你应该有一个空间,你要打破线,包括一个空格.(更多关于以下内容.)
例:
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并且还可以将换行符嵌入到字符串中:
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空行对成功至关重要.这仅适用于延迟扩展,否则换行后将忽略该行的其余部分.
它有效,因为行末端的插入符号忽略下一个换行符并转义下一个字符,即使下一个字符也是换行符(在此阶段始终忽略回车符).
问题是,我们应该支持一个不遵守规则的坏工具(有人称之为浏览器,但事实并非如此),还是应该切换到浏览器?
3> T.J. Crowder..:(这基本上是对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
.)为了便于阅读和理智,最好只在参数之间进行分解(确保包含空格).
可以肯定的
^
是不会在批处理文件中的最后一件事,因为似乎与一个重大问题.
4> Todd Partrid..:多个命令可以放在括号中并分布在多个行中; 所以像这样
echo hi && echo hello
可以这样:( echo hi echo hello )变量也可以帮助:
set AFILEPATH="C:\SOME\LONG\PATH\TO\A\FILE" if exist %AFILEPATH% ( start "" /b %AFILEPATH% -option C:\PATH\TO\SETTING... ) else ( ...另外我注意到carets(
^
)if
条件只有在存在空格时才喜欢它们:if exist ^
5> 小智..:然而,似乎在for循环的值的中间分割不需要插入符号(实际上尝试使用一个将被视为语法错误).例如,
for %n in (hello bye) do echo %n请注意,在hello之后或再见之前甚至不需要空格.