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




windows bat教程 (11)

在一个中运行多个脚本我有同样的问题。 我第一个死的时候一直没有意识到它正在退出第一个剧本。

:: OneScriptToRunThemAll.bat
CALL ScriptA.bat
CALL ScriptB.bat
EXIT

:: ScriptA.bat
Do Foo
EXIT
::ScriptB.bat
Do bar
EXIT

我删除了所有11个脚本的EXIT行,并再次尝试,并且在同一个命令窗口中一次只运行一个。

:: OneScriptToRunThemAll.bat
CALL ScriptA.bat
CALL ScriptB.bat
EXIT

::ScriptA.bat
Do Foo

::ScriptB.bat
Do bar

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

commit-build.bat内容:

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

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

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


只需使用call命令! 这里是一个例子:

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

干杯!


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

 call "msbuild.bat"

历史

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

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

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

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

提示

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

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
...

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


尝试

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

要调用.bat文件中的.bat文件,请使用

call foo.bat

(是的,这很愚蠢,如果你可以用foo.bat调用它,就像你可以从命令提示符那样调用它,但是正确的方法是使用call会更有意义。)


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

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.

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

使用

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

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


Start msbuild.bat
Start unit-tests.bat
Start deploy.bat

如果这不起作用,请将start替换为call或尝试以下操作:

Start msbuild.bat
Goto :1
:1
Start unit-tests.bat
Goto :2
:2
Start deploy.bat

如果你想一次打开许多批处理文件,你可以使用call命令,但是如果你想一次打开多个文件,call命令关闭当前的bat文件并转到另一个文件,你可能想试试这个

@echo off
start cmd "call ex1.bat&ex2.bat&ex3.bat" 

等等或重复启动cmdcall ...”,无论多少文件。 这适用于WIN 7不确定其他系统。


看你的文件名,你有没有考虑过使用像nant或ant这样的构建工具(java版本)。 与bat文件相比,您将获得更多的控制权





cmd