2014-10-30 72 views
0
@call JBOSSbuildWar.bat > ..\logs\JBOSSbuildWar_out 2> ..\logs\JBOSSbuildWar_err 

start cmd /c @call WeblogicbuildWar.bat > ..\logs\WeblogicbuildWar_out 2> ..\logs\WeblogicbuildWar_err 

start cmd /c @call FEBAPortletWebWar.bat > ..\logs\FEBAPortletWebWar_out 2> ..\logs\FEBAPortletWebWar_err 

start cmd /c @call buildStaticJBoss.bat > ..\logs\JBOSSFEBAStaticWar_out 2> ..\logs\JBOSSFEBAStaticWar_err 

我有這套批處理文件按順序執行。我想分出這個,以便它們並行執行。我已經使用啓動cmd/c完成了。現在這將爲它們中的每一個分出新的命令提示符窗口。假設在此之後有一些陳述。我想確保它們在所有分支批處理文件完成後才能執行。如何實現這一目標?作出命令提示等待

比方說由每個文件中取出的平均時間爲: JBOSSbuildWar-30分鐘 WeblogicbuildWar-35分鐘 FEBAPortletWebWar-30分鐘 buildStaticJBoss-35分鐘

由於主命令提示窗口已經完成其任務30中分鐘,分叉的批處理文件需要5分鐘才能完成,我希望主cmd等待其他人完成。請幫助。

回答

0

可以每個命令之前添加該定時器功能:

@call JBOSSbuildWar.bat> .. \日誌\ JBOSSbuildWar_out 2> .. \日誌\ JBOSSbuildWar_err

超時/噸60/NOBREAK > NUL

開始CMD/C @call WeblogicbuildWar.bat> .. \日誌\ WeblogicbuildWar_out 2> .. \日誌\ WeblogicbuildWar_err

超時/噸60/NOBREAK> NUL

開始CMD/C @call FEBAPortletWebWar.bat> .. \日誌\ FEBAPortletWebWar_out 2> .. \日誌\ FEBAPortletWebWar_err

超時/噸60/NOBREAK> NUL

開始CMD/C @call buildStaticJBoss。蝙蝠> .. \日誌\ JBOSSFEBAStaticWar_out 2> .. \登錄\ JBOSSFEBAStaticWar_err

PS:60個代表1分鐘,如果你想30分鐘後,它簡單的方法更改爲1800

1

在您的主批次,

del "%temp%\*.processfinished" >nul 2>nul 
... 
start ....whatever1.bat... 
start ....whatever2.bat... 
start ....whatever3.bat... 
... 
wait4all: 
for /L %%a in (1,1,3) do if not exist "%temp%\%%a.processfinished" timeout /t 1 >nul &goto wait4all 
:: continues here when all (3) processes have finished. 
del "%temp%\*.processfinished" >nul 2>nul 

然後,在每一個(3)的子公司.bat文件,創建一個文件"%temp%\x.processfinished"其中x = 1的第一工序中,2表示第二個等等。

當子流程開始時,程序會等待,直到每個都創建了自己的「.processcompleted」文件,方法是檢查是否有3個文件丟失,是否超時1秒,然後再查看。只有在3個文件存在的情況下,它纔會繼續。

在所有可能情況下,如果子進程可以接受一個額外的參數(這個子進程的「processfinished」文件的名稱)而不是每個參數都有一個固定的數字,那將是最好的。

你可以擴展這個,並使用日期和時間來擴充文件名,這樣整個過程本身可以並行運行多次。

BTW - 通過啓動

@echo off 

的過程中,您可以刪除所有領先的@ S的(一切確實是抑制命令報告爲一個線。)

而且,start更快樂,因爲start "" .....,也就是說,引號中有一個空窗口標題作爲其第一個參數。這樣可以根據需要「引用」其他參數 - 所使用的第一個「帶引號」的參數被用作流程的「窗口標題」,並可能會丟失到子流程中。定期分配一個虛擬(如果有必要爲空)「窗口標題」意味着你不會在未來絆倒這個問題。

1

有多個命令,你可以選擇什麼人來使用,

暫停,直到用戶按下任意鍵

將暫停CMD。 顯示消息,「按任意鍵繼續...」 我使用此命令的某種變體,稱爲暫停> nul。 它所做的是暫停.bat,但不顯示消息,你只是得到一個空白的屏幕!

TIMEOUT

多的語法,是非常有用的命令,用這一個不少。 示例代碼:TIMEOUT 10 可以通過按鍵旁路 暫停執行命令10秒。 你也可以像這樣構造它:TIMEOUT 10/nobreak 這不允許用戶按下某個鍵來跳過它,它們必須忍受它!

非常漂亮的一個。 語法如下:PING 1.1.1.1 -n 1 -w 60000> NUL 這三個中可能最複雜的一個。 PING可以用來延遲執行幾秒鐘。

希望我幫了忙! -Logan