我正在尝试让commit-build.bat执行其他.bat文件,作为构建过程的一部分。
commit-build.bat的内容:
"msbuild.bat"
"unit-tests.bat"
"deploy.bat"
这看起来很简单,但commit-build.bat只执行列表中的第一项(msbuild.bat)。
我分别运行了每个文件,没有任何问题。
我正在尝试让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
您的脚本应为:
start "msbuild.bat"
start "unit-tests.bat"
start "deploy.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
如果要同时打开多个批处理文件,可以使用call命令。然而,call命令关闭当前bat文件并转到另一个文件。如果您想同时打开多个,可以尝试以下操作:
@echo off
start cmd "call ex1.bat&ex2.bat&ex3.bat"
依此类推,或对任意多个文件重复start cmd“call…”。这适用于Windows7,但我不确定其他系统。