我试图了解批处理文件中单个命令行中的多个命令是如何工作的。
dir & md folder1 & rename folder1 mainfolder
其他使用类似命令的情况,但
&
替换为&&
。dir && md folder1 && rename folder1 mainfolder
1.这两种情况有什么区别?
我想问的另一件事:
单线
batch.bat
:dir & md folder1 & rename folder1 mainfolder
多线
batch.bat
:dir
md folder1
rename folder1 mainfolder
2.就批处理文件而言,这种单线和多线是否相等?
我想知道的一件事:
3.如果我从main.bat调用其他批处理文件,它们是否独立且同时运行?主批处理文件不等待其他批处理文件中的结束程序吗?怎么做?
最佳答案
两个命令之间的&
仅导致独立于第一个命令的结果执行两个命令。 &
的命令右命令是在&
的命令左命令完成后执行的,与上一个命令的成功或错误无关,即与上一个命令的退出/返回值无关。&&
导致有条件地执行第二条命令。仅当第一个命令成功执行(即以返回码0退出)后,第二个命令才会执行。
有关替代说明,请参见Conditional Execution。
dir & md folder1 & rename folder1 mainfolder
因此等于dir
md folder1
rename folder1 mainfolder
多行替代dir && md folder1 && rename folder1 mainfolder
将是dir
if not errorlevel 1 (
md folder1
if not errorlevel 1 (
rename folder1 mainfolder
)
)
if not errorlevel 1
表示而不是终止之前的命令,并以大于0 的退出代码终止。由于dir
和md
命令永远不会以负值退出,只有0或更大(几乎所有命令和控制台应用程序)且值为 0 是成功的退出代码,这是测试是否成功执行的正确方法dir
和md
。有关
errorlevel
的其他有用的Stack Overflow主题:必须注意将无条件运算符
&
与条件运算符(如&&
和||
)混合,因为执行顺序不一定是命令行上命令的顺序。例子:
dir "C:\Users\%UserName%" /AD 2>nul || dir "%UserProfile%" /AD & echo User profile path: "%UserProfile%"
该命令行执行为:dir "C:\Users\%UserName%" /AD 2>nul
if errorlevel 1 dir "%UserProfile%" /AD
echo User profile path: "%UserProfile%"
ECHO 命令始终独立于执行第一个 DIR 的结果而独立执行,而仅当第一个 DIR 如Windows XP上失败或用户的配置文件文件夹不在驱动器C上时,才执行第二个 DIR 。一个文件夹Users
。仅在第二个 DIR 之后的第一个 DIR 失败而与第二个 DIR 无关的情况下,才有必要在执行 ECHO 时使用
(
和)
。dir "C:\Users\%UserName%" /AD 2>nul || ( dir "%UserProfile%" /AD & echo User profile path: "%UserProfile%" )
该命令行执行为:dir "C:\Users\%UserName%" /AD 2>nul
if errorlevel 1 (
dir "%UserProfile%" /AD
echo User profile path: "%UserProfile%"
)
有关第三个问题的答案,请参见我对How to call a batch file in the parent folder of current batch file?的回答,其中我解释了使用call
命令或start
命令运行批处理文件或使用批处理文件中的这两个命令都不运行批处理文件的区别。关于windows - 使用Windows批处理文件的单行多命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25343351/