[batch-file] 如何在.BAT文件中運行多個.BAT文件



Answers

所有其他答案都是正確的:使用呼叫。 例如:

 call "msbuild.bat"

歷史

在古代dos版本中,不可能遞歸執行批處理文件。 然後引入了調用命令,該命令調用另一個cmd shell來執行批處理文件,並在完成時將執行返回到調用的cmd shell。

很顯然,在更高版本中,不再需要其他cmd shell。

在早期,許多批處理文件依賴於調用批處理文件不會返回到調用批處理文件的事實。 在沒有附加語法的情況下改變這種行為會破壞許多系統,如批處理菜單系統(使用菜單結構的批處理文件)。

正如在許多情況下與微軟一樣,向後兼容性是導致這種行為的原因。

提示

如果批處理文件的名稱中有空格,請在名稱周圍使用引號:

call "unit tests.bat"

順便說一句:如果你沒有所有批處理文件的名字,你也可以使用這樣做:(不保證批處理文件調用的正確順序,遵循文件系統的順序)

FOR %x IN (*.bat) DO call "%x"

通話結束後,您還可以對錯誤級別做出反應。 使用

exit /B 1   # or any other integer value in 0..255

給出一個錯誤級別。 0表示正確執行。 在調用批處理文件中,您可以使用

if errorlevel neq 0 <batch command>

如果錯誤級別1使用,如果您有一個較舊的Windows,然後NT4 / 2000 / XP捕獲所有錯誤級別1和更高。

為了控制批處理文件的流程,有goto :-(

if errorlevel 2 goto label2
if errorlevel 1 goto label1
...
:label1
...
:label2
...

正如其他人指出的:看看構建系統來替換批處理文件。

Question

我試圖讓我的commit-build.bat執行其他.BAT文件作為我們構建過程的一部分。

commit-build.bat內容:

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

這似乎很簡單,但commit-build.bat只執行列表中的第一項( msbuild.bat )。

我已經分別運行了每個文件,沒有任何問題。




嘗試

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



Start msbuild.bat
Start unit-tests.bat
Start deploy.bat

如果這不起作用,請將start替換為call或嘗試以下操作:

Start msbuild.bat
Goto :1
:1
Start unit-tests.bat
Goto :2
:2
Start deploy.bat



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



如果你想一次打開許多批處理文件,你可以使用call命令,但是如果你想一次打開多個文件,call命令會關閉當前的bat文件並轉到另一個文件,你可能想試試這個

@echo off
start cmd "call ex1.bat&ex2.bat&ex3.bat" 

等等或重複啟動cmdcall ...”,無論多少文件。 這適用於WIN 7不確定其他系統。




如果我們有2個批處理腳本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





Related