我试图了解批处理文件中单个命令行中的多个命令是如何工作的。
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退出)后,第二个命令才会执行。
有关替代解释,请参见条件执行。
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
。请参阅Microsoft支持文章“测试批处理文件中的特定错误级别”。
有关错误级别的其他有用的堆栈溢出主题:
必须注意混合使用无条件运算符&
和有条件运算符,例如&&
,||
由于执行顺序不一定是命令行上命令的顺序。
例:
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如果第一只执行DIR或不是一个文件夹中的:失败就像在Windows XP或用户的配置文件夹不上驱动器CUsers
的。
仅当第二个DIR之后的第一个DIR失败而与第二个DIR的结果无关时,才需要使用ECHO(
并)
执行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%"
)
有关第三个问题的答案,请参阅我关于如何在当前批处理文件的父文件夹中调用批处理文件的答案。在这里,我已经说明了使用命令运行批处理文件的区别,call
或者使用批处理文件中start
的这两个命令或不使用这两个命令运行批处理文件的区别。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句