我正在尝试让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)。
我分别运行了每个文件,没有任何问题。
当前回答
在一个脚本中运行多个脚本时,我遇到了相同的问题。我一直让它在第一个脚本中死去,但没有意识到它在第一脚本中退出。
:: 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
其他回答
call msbuild.bat
call unit-tests.bat
call deploy.bat
我知道我参加晚会有点晚了,但这里有另一种方法。也就是说,这个方法应该等到第一个完成,第二个完成,依此类推。
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。)
如果要同时打开多个批处理文件,可以使用call命令。然而,call命令关闭当前bat文件并转到另一个文件。如果您想同时打开多个,可以尝试以下操作:
@echo off
start cmd "call ex1.bat&ex2.bat&ex3.bat"
依此类推,或对任意多个文件重复start cmd“call…”。这适用于Windows7,但我不确定其他系统。
您正在调用多个批处理以编译程序。我想当然地认为,如果发生错误:1) 批处理中的程序将以错误级别退出;2) 你想知道这件事。
for %%b in ("msbuild.bat" "unit-tests.bat" "deploy.bat") do call %%b|| exit /b 1
“||”测试错误级别是否高于0。这样,所有批次都会按顺序调用,但会在出现任何错误时停止,让屏幕保持原样,以便您看到任何错误消息。