我试图了解批处理文件中单个命令行中的多个命令是如何工作的。

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 的退出代码终止。由于dirmd命令永远不会以负值退出,只有0或更大(几乎所有命令和控制台应用程序)且值为 0 是成功的退出代码,这是测试是否成功执行的正确方法dirmd
有关errorlevel的其他有用的Stack Overflow主题:
  • Which cmd.exe internal commands clear the ERRORLEVEL to 0 upon success?
  • What are the ERRORLEVEL values set by internal cmd.exe commands?

  • 必须注意将无条件运算符&与条件运算符(如&&||)混合,因为执行顺序不一定是命令行上命令的顺序。
    例子:
    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/

    10-13 06:41
    查看更多