batch-file file指令 - 如何在.BAT文件中運行多個.BAT文件





file教學 tutorial (12)


在一個中運行多個腳本我有同樣的問題。 我第一個死的時候一直沒有意識到它正在退出第一個劇本。

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

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

我刪除了所有11個腳本的EXIT行,並再次嘗試,並且在同一個命令窗口中一次只運行一個。

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

::ScriptA.bat
Do Foo

::ScriptB.bat
Do bar

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

commit-build.bat內容:

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

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

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




如果我們有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



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

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

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




嘗試

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



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

 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
...

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




您正在調用多個批處理以編譯程序。 我理所當然地認為,如果發生錯誤:
1)批處理中的程序將以錯誤級別退出;
2)你想知道它。

for %%b in ("msbuild.bat" "unit-tests.bat" "deploy.bat") do call %%b|| exit /b 1

'||' 測試的錯誤級別高於0.這樣,所有批次都按順序調用,但會在出現任何錯誤時停止,並使屏幕保持原樣,以供您查看任何錯誤消息。




只需使用call命令! 這裡是一個例子:

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



如果我們想打開多個命令提示符,那麼我們可以使用

start cmd /k 

/k :是強制執行的。

啟動許多命令propmts可以完成如下。

start cmd /k Call rc_hub.bat 4444

start cmd /k Call rc_grid1.bat 5555

start cmd /k Call rc_grid1.bat 6666

start cmd /k Call rc_grid1.bat 5570.



要調用.bat文件中的.bat文件,請使用

call foo.bat

(是的,這很愚蠢,如果你可以用foo.bat調用它,就像你可以從命令提示符那樣調用它,但是正確的方法是使用call會更有意義。)




看你的文件名,你有沒有考慮過使用像nant或ant這樣的構建工具(java版本)。 與bat文件相比,您將獲得更多的控制權




嘗試start /WAIT phpunit ...來分叉進程,並等待它,或者只是start phpunit ...叉和繼續。 幫助在這裡: start /?







batch-file cmd