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

commit-build.bat的内容:

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

这看起来很简单,但commit-build.bat只执行列表中的第一项(msbuild.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

其他回答

您正在调用多个批处理以编译程序。我想当然地认为,如果发生错误:1) 批处理中的程序将以错误级别退出;2) 你想知道这件事。

for %%b in ("msbuild.bat" "unit-tests.bat" "deploy.bat") do call %%b|| exit /b 1

“||”测试错误级别是否高于0。这样,所有批次都会按顺序调用,但会在出现任何错误时停止,让屏幕保持原样,以便您看到任何错误消息。

尝试:

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

Use:

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

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

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

call foo.bat

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

只需使用call命令!下面是一个示例:

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