如何在.BAT文件中运行多个.BAT文件

我试图让我的commit-build.bat执行其他.BAT文件作为我们构建过程的一部分。

commit-build.bat内容:

"msbuild.bat"
"unit-tests.bat"
"deploy.bat"

这似乎很简单,但commit-build.bat只执行列表中的第一项( msbuild.bat )。

我已经分别运行了每个文件,没有任何问题。


使用

call msbuild.bat
call unit-tests.bat
call deploy.bat

不使用CALL时,当前批处理文件停止并且调用的批处理文件开始执行。 这是一个追溯到早期MS-DOS时代的奇特行为


所有其他答案都是正确的:使用呼叫。 例如:

 call "msbuild.bat"

历史

在古代dos版本中,不可能递归执行批处理文件。 然后引入了调用命令,该命令调用另一个cmd shell来执行批处理文件,并在完成时将执行返回到调用的cmd shell。

很显然,在更高版本中,不再需要其他cmd shell。

在早期,许多批处理文件依赖于调用批处理文件不会返回到调用批处理文件的事实。 在没有附加语法的情况下更改该行为会打破许多系统,如批处理菜单系统(使用菜单结构的批处理文件)。

正如在许多情况下与微软一样,向后兼容性是导致这种行为的原因。

提示

如果批处理文件的名称中有空格,请在名称周围使用引号:

call "unit tests.bat"

顺便说一句:如果你没有所有批处理文件的名字,你也可以使用这样做:(不保证批处理文件调用的正确顺序,遵循文件系统的顺序)

FOR %x IN (*.bat) DO call "%x"

通话结束后,您还可以对错误级别做出反应。 使用

exit /B 1   # or any other integer value in 0..255

给出一个错误级别。 0表示正确执行。 在调用批处理文件中,您可以使用

if errorlevel neq 0 <batch command>

如果错误级别1使用,如果您有一个较旧的Windows,然后NT4 / 2000 / XP捕获所有错误级别1和更高。

为了控制批处理文件的流程,有goto :-(

if errorlevel 2 goto label2
if errorlevel 1 goto label1
...
:label1
...
:label2
...

正如其他人指出的:看看构建系统来替换批处理文件。


如果我们想打开多个命令提示符,那么我们可以使用

start cmd /k 

/k :是强制执行的。

启动许多命令propmts可以完成如下。

start cmd /k Call rc_hub.bat 4444

start cmd /k Call rc_grid1.bat 5555

start cmd /k Call rc_grid1.bat 6666

start cmd /k Call rc_grid1.bat 5570.
链接地址: http://www.djcxy.com/p/92295.html

上一篇: How to run multiple .BAT files within a .BAT file

下一篇: Displaying Windows command prompt output and redirecting it to a file