使用Windows批处理文件的多行命令的单行

Qua*_*ati 13 windows command-line cmd batch-file simultaneous

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

dir & md folder1 & rename folder1 mainfolder
Run Code Online (Sandbox Code Playgroud)

和其他情况类似的命令,但&&&.

dir && md folder1 && rename folder1 mainfolder
Run Code Online (Sandbox Code Playgroud)

1.这两种情况有什么区别?


我想问的其他事情:

单线batch.bat:

dir & md folder1 & rename folder1 mainfolder
Run Code Online (Sandbox Code Playgroud)

多线程batch.bat:

dir
md folder1
rename folder1 mainfolder
Run Code Online (Sandbox Code Playgroud)

2.这种单线程和多线程在批处理文件程序方面是否相同?


还有一件事我想知道:

3.如果我从main.bat调用其他批处理文件,它们是否独立运行?主批处理文件不等待其他批处理文件中的结束程序?怎么做?

Mof*_*ofi 25

&在两个命令之间简单地导致执行两个命令而独立于第一个命令的结果.命令权限&在命令离开&完成独立于前一命令的成功或错误之后执行,即独立于先前命令的退出/返回值.

&&导致第二个命令的条件执行.仅当第一个命令成功时才执行第二个命令,这意味着退出返回码0.

有关其他说明,请参阅条件执行.

dir & md folder1 & rename folder1 mainfolder
Run Code Online (Sandbox Code Playgroud)

因此是平等的

dir
md folder1
rename folder1 mainfolder
Run Code Online (Sandbox Code Playgroud)

多线替代

dir && md folder1 && rename folder1 mainfolder
Run Code Online (Sandbox Code Playgroud)

将会

dir
if not errorlevel 1 (
   md folder1
   if not errorlevel 1 (
      rename folder1 mainfolder
   )
)
Run Code Online (Sandbox Code Playgroud)

if not errorlevel 1指命令之前没有与退出代码终止0大.作为命令dir并且md永远不会以负值退出,只有0或更大(几乎所有命令和控制台应用程序)和值0是成功的退出代码,这是一个正确的方法来测试成功执行dirmd.请参阅Microsoft支持文章测试批处理文件中的特定错误级别.

关于errorlevel的其他有用的Stack Overflow主题:

必须注意将无条件运算符&与条件运算符混合&&,||因为执行顺序不一定是命令行上命令的顺序.

例:

dir "C:\Users\%UserName%" /AD 2>nul || dir "%UserProfile%" /AD & echo User profile path: "%UserProfile%"
Run Code Online (Sandbox Code Playgroud)

此命令行执行如下:

dir "C:\Users\%UserName%" /AD 2>nul
if errorlevel 1 dir "%UserProfile%" /AD
echo User profile path: "%UserProfile%"
Run Code Online (Sandbox Code Playgroud)

ECHO指令总是执行独立于第一执行的结果DIR而第二DIR只执行,如果第一DIR文件夹中或者不:未能像在Windows XP或用户的配置文件夹不上驱动器C Users的.

有必要使用()上执行ECHO仅当第一DIR后第二失败DIR独立于第二的结果DIR.

dir "C:\Users\%UserName%" /AD 2>nul || ( dir "%UserProfile%" /AD & echo User profile path: "%UserProfile%" )
Run Code Online (Sandbox Code Playgroud)

此命令行执行如下:

dir "C:\Users\%UserName%" /AD 2>nul
if errorlevel 1 (
    dir "%UserProfile%" /AD
    echo User profile path: "%UserProfile%"
)
Run Code Online (Sandbox Code Playgroud)

关于第三个问题的答案,请参阅我的答案如何在当前批处理文件的父文件夹中调用批处理文件?我已经解释了在批处理文件中使用命令运行批处理文件call或使用start或不使用这两个命令的区别.