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

commit-build.bat的内容:

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

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

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


当前回答

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

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

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

其他回答

call msbuild.bat
call unit-tests.bat
call deploy.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

尝试:

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

在一个脚本中运行多个脚本时,我遇到了相同的问题。我一直让它在第一个脚本中死去,但没有意识到它在第一脚本中退出。

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

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

我删除了所有11个脚本EXIT行,然后再次尝试,所有11个都在同一命令窗口中依次运行。

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

::ScriptA.bat
Do Foo

::ScriptB.bat
Do bar

Use:

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

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