我正在尝试让commit-build.bat执行其他.bat文件,作为构建过程的一部分。

commit-build.bat的内容:

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

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

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


当前回答

如果我们有两个批处理脚本aaa.bat和bbb.bat,并且调用如下

call aaa.bat
call bbb.bat

执行脚本时,它将首先调用aaa.bat,等待aaa.bat的线程终止,然后调用bbb.bat。

但如果您不想等待aaa.bat终止调用bbb.bat,请尝试使用START命令:

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
  [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
  [/AFFINITY <hex affinity>] [/WAIT] [/B] [command/program]
  [parameters]

检查:

start /b aaa.bat
start /b bbb.bat

其他回答

并行运行多个批处理文件的最简单方法

start "systemLogCollector" /min cmd /k call systemLogCollector.bat
start "uiLogCollector" /min cmd /k call uiLogCollector.bat
start "appLogCollector" /min cmd /k call appLogCollector.bat

在这里,三个批处理文件以最小化状态在单独的命令窗口上运行。如果不希望最小化,请删除/min。此外,如果你以后不需要控制它们,那么你可以去掉标题。因此,裸机命令将是-start cmd/k call systemLogCollector.bat


如果要终止它们,请运行以下命令-

taskkill /FI "WindowTitle eq appLogCollector*" /T /F
taskkill /FI "WindowTitle eq uiLogCollector*" /T /F
taskkill /FI "WindowTitle eq systemLogCollector*" /T /F

我知道我参加晚会有点晚了,但这里有另一种方法。也就是说,这个方法应该等到第一个完成,第二个完成,依此类推。

start "" /wait cmd.exe /c msbuild.bat
start "" /wait cmd.exe /c unit-tests.bat
start "" /wait cmd.exe /c deploy.bat

使用此方法可能产生的唯一问题是,在生成新的cmd.exe实例时,每个cmd.exe实例中都保留了错误级别检查。

Or..

start "" /wait call msbuild.bat
start "" /wait call unit-tests.bat
start "" /wait call deploy.bat

希望这有帮助。

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

call foo.bat

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

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

start cmd /k

/k: 强制执行。

可以按如下方式启动许多命令提示。

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命令。然而,call命令关闭当前bat文件并转到另一个文件。如果您想同时打开多个,可以尝试以下操作:

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

依此类推,或对任意多个文件重复start cmd“call…”。这适用于Windows7,但我不确定其他系统。