如何在批处理文件中的多行上分割长命令?
如何在批处理文件中的多行上分割长命令?
Answers:
^
只要您记得插入符和其后的换行符已完全删除,就可以用插入符断开长行。因此,如果您在换行的地方应该有一个空格,请加上一个空格。(下面有更多内容。)
例:
copy file1.txt file2.txt
将被写为:
copy file1.txt^
file2.txt
echo
编辑时创建总共2个换行符。
co^␍py ^␍file1 ^␍file2
。我建议您删除您的评论以避免混淆,特别是因为这个问题是如此受欢迎
插入符号的规则是:
在行的末尾插入符号,添加下一行,将转义附加行的第一个字符。
您可以多次使用插入符号,但完整的行不能超过〜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 ^[newline]"file1.txt" ^[newline]"file2.txt"
不起作用!我必须添加一个空格:copy ^[newline] "file1.txt" ^[newline] "file2.txt"
。
(这基本上是对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
(最后一个有效是因为the xc
和the 之间没有空格^
,并且在下一行的开头也没有空格。因此,当您删除the ^
和newline时,会得到...。xcopy
)
为了提高可读性和完整性,最好只在两个参数之间打断(一定要包括空格)。
可以肯定的^
是不会在批处理文件中的最后一件事,因为似乎与一个重大问题。
可以将多个命令放在括号中并分布在多行中。所以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 ^
cmd1.bat && cmd2.bat
与parens形式不同:执行成功执行的cmd2.bat
iff cmd1.bat
(-无设置%errorcode%
)。后一种形式无条件执行。出乎意料的是(至少对我而言),显然,您不能同时使用+的组合,即&&
在换行符之前添加。
( echo <line break here> hello )
结果为空行。
但是,似乎在for循环的值中间进行拆分不需要插入符号(并且实际上尝试使用一个符号将被视为语法错误)。例如,
for %n in (hello
bye) do echo %n
请注意,在问候之后或再见之前甚至都不需要空间。
for
语法的一部分:“ for-set”中元素的分隔符是空格,逗号,分号,等号,TAB字符和换行符。
do
part包含多个/嵌套的if-else
语句怎么办?
^
在命令文本之前和之后添加空格,则可以在下一行开始而不添加空格。