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

commit-build.bat的内容:

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

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

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


当前回答

您的脚本应为:

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

其他回答

有了正确的引用(有时可能很棘手):

start "" /D "C:\Program Files\ProgramToLaunch" "cmd.exe" "/c call ""C:\Program Files\ProgramToLaunch\programname.bat"""

第一个参数-标题(在本例中为空)第二个参数-/D指定起始目录,如果需要当前工作目录(例如“%~dp0”),则可以提交第三个参数-要启动的命令,“cmd.exe”第四个arg-命令的参数,其中的参数使用双引号(这是批量转义引号的方法)

如果我们有两个批处理脚本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

尝试:

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

您的脚本应为:

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

Use:

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

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