我试图理解批处理文件中单个命令行中的多个命令是如何工作的。
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调用其他批处理文件,它们是否独立并同时运行?主批处理文件不等待其他批处理文件中的结束过程?怎么做呢?
发布于 2014-08-17 05:09:32
两个命令之间的&
只会导致独立于第一个命令的结果执行两个命令。&
的命令右侧在&
的左侧命令结束后执行,与上一条命令的成功或错误无关,即与上一条命令的退出/返回值无关。
&&
会导致有条件地执行第二个命令。仅当第一个命令成功时才执行第二个命令,这意味着退出并返回代码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或更大值(几乎所有命令和控制台应用程序都是如此),并且值是成功的退出代码,因此这是测试dir
和md
成功执行的正确方法。
关于errorlevel
的其他有用的堆栈溢出主题
必须注意将无条件运算符&
与&&
和||
等条件运算符混合使用,因为执行顺序不一定与命令行上的命令顺序相同。
示例:
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命令始终独立于第一个目录的执行结果执行,而第二个目录仅在第一个目录失败时执行,或者用户的配置文件文件夹不在驱动器C:上或根本不在文件夹Users
中。
仅当独立于第二个目录<>E252的结果,第一个目录在第二个目录之后失败时,才有必要在执行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
或不使用这两个命令运行批处理文件的区别。
发布于 2021-01-06 16:40:31
还要考虑scriptrunner
ScriptRunner.exe -appvscript demoA.cmd arg1 arg2 -appvscriptrunnerparameters -wait -timeout=30 -rollbackonerror -appvscript demoB.ps1 arg3 arg4 -appvscriptrunnerparameters -wait -timeout=30
它还具有回滚、超时和等待等功能。
https://stackoverflow.com/questions/25343351
复制相似问题