&
两个命令之间只会导致执行两个命令,而与第一个命令的结果无关。命令权为&
在命令左边之后执行&
完成独立于前一个命令的成功或错误,即独立于前一个命令的退出/返回值。
&&
导致第二个命令的条件执行。仅当第一个命令成功时才执行第二个命令,这意味着退出并返回代码 0。
有关替代解释,请参阅条件执行.
dir & md folder1 & rename folder1 mainfolder
因此是相等的
dir
md folder1
rename folder1 mainfolder
多行替代
dir && md folder1 && rename folder1 mainfolder
would be
dir
if not errorlevel 1 (
md folder1
if not errorlevel 1 (
rename folder1 mainfolder
)
)
if not errorlevel 1
表示之前执行过的命令not以退出代码终止大于0。作为命令dir
and md
永远不会以负值退出,只以 0 或更大的值(几乎所有命令和控制台应用程序)和值退出0是成功的退出代码,这是测试成功执行的正确方法dir
and md
.
其他有用的 Stack Overflow 主题errorlevel
:
- 哪些 cmd.exe 内部命令在成功后将 ERRORLEVEL 清除为 0?
- 内部 cmd.exe 命令设置的 ERRORLEVEL 值是多少?
混合无条件运算符时必须小心&
与条件运算符类似&&
and ||
因为执行顺序不一定是命令行上命令的顺序。
Example:
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%"
The ECHO命令的执行始终独立于第一个命令的执行结果DIR而第二个DIR仅当第一个时才执行DIR像在 Windows XP 上一样失败,或者用户的配置文件文件夹不在驱动器 C: 上或不在文件夹中Users
at all.
有必要使用(
and )
在执行时ECHO仅当首先DIR第二秒后失败DIR独立于第二个结果DIR.
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
或者在批处理文件中不使用这两个命令。