当前位置:  开发笔记 > 开发工具 > 正文

通过批处理文件在多行中拆分长命令

如何解决《通过批处理文件在多行中拆分长命令》经验,为你挑选了5个好方法。

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



1> Wayne..:

您可将长线,插入符号^,只要你记住,插入符和它后面的换行符被完全去除.所以,如果你应该有一个空间,你要打破线,包括一个空格.(更多关于以下内容.)

例:

copy file1.txt file2.txt

将写成:

copy file1.txt^
 file2.txt


如果在`^`之前和命令文本之后添加空格,则可以在没有空格的情况下启动下一行.
为安全**_ always_以空白线**结束使用插入符号时,请参阅[批处理文件中的简单克拉消耗所有内存](http://stackoverflow.com/questions/15466298)
@GavinMiller:*"复制后的插入符号^和新行上的file1.txt将无效"*这不是真的.你可以在任何地方分割线,包括在一个单词的中间,比如`co ​​^␍py^␍file1^␍file2`.我建议你删除你的评论,以避免混淆,特别是因为这个问题很受欢迎
似乎仅限于前两个附加线?
@SebaIllingworth - 不,您可以随时添加[SPACE] + [^]和两个空白行,以便在"echo"时创建总共2个换行符.
这里的一个陷阱是^必须是该行的最后一个字符,即后面不能有空格。我对此有麻烦,结果是在插入符号后有很多空格-在我使用的编辑器中不容易看到。

2> jeb..:

插入符号的规则是:

在行尾的插入符号附加下一行,附加行的第一个字符将被转义.

您可以多次使用插入符号,但完整的行不得超过〜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之后或再见之前甚至不需要空格.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有