如何在批处理文件中的多行上拆分长命令? 测试
(这基本上是对Wayne答案的重写,可是因为对插入符号的混淆被清除了。因此我把它做为CW发布。我并不羞于编辑答案,但彻底重写它们彷佛不合适。) spa
您可使用插入符号( ^
)分隔长行,只需记住插入符号及其后面的换行符将彻底从命令中删除 ,所以若是您将其放在须要空格的位置(例如参数之间),请必定要包括空格(在^
以前,或在下一行的开头 - 后一个选择可能有助于使它更清晰,这是一个延续)。 code
示例:( 全部在Windows XP和Windows 7上测试过) three
xcopy file1.txt file2.txt
能够写成: 字符串
xcopy^ file1.txt^ file2.txt
要么 get
xcopy ^ file1.txt ^ file2.txt
甚至 io
xc^ opy ^ file1.txt ^ file2.txt
(最后一个是有效的,由于xc
和^
没有空格,下一行的开头没有空格。因此当你删除^
和换行符时,你会获得... xcopy
。) for循环
为了便于阅读和理智,最好只在参数之间进行分解(确保包含空格)。 变量
确保^
不是批处理文件中的最后一件事,由于这彷佛是一个主要问题 。 扩展
然而,彷佛在for循环的值的中间分割不须要插入符号(实际上尝试使用一个将被视为语法错误)。 例如,
for %n in (hello bye) do echo %n
请注意,在hello以后或再见以前甚至不须要空格。
多个命令能够放在括号中并分布在多个行中; 因此像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 ( ...
另外我注意到插入符号( ^
) if
条件因素只有在存在空格时才能使用它们:
if exist ^
插入符号的规则是:
在行尾的插入符号附加下一行,附加行的第一个字符将被转义。
您能够屡次使用插入符号,但完整的行不得超过〜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
空行对成功相当重要。 这仅适用于延迟扩展,不然换行后将忽略该行的其他部分。
它有效,由于行末端的插入符号忽略下一个换行符并转义下一个字符,即便下一个字符也是换行符(在此阶段始终忽略回车符)。
只要您记住插入符号及其后面的换行符被彻底删除,您就可使用插入符号^
来划分长行。 所以,若是应该有一个空间,你要打破线,包括一个空格。 ( 更多关于如下内容。 )
例:
copy file1.txt file2.txt
将写成:
copy file1.txt^ file2.txt