2013-12-20 75 views
7

我想從批處理文件(也是批處理文件)中啓動兩個程序 - 它們將執行幾秒鐘。然後在主要批處理文件中,我想在兩者都完成時等待,然後繼續主執行。這可能嗎?你可以分叉Windows批處理文件嗎?

+0

http://stackoverflow.com/questions/2572176/how-to-make-the-batch-file-wait-until-another-batch-file-completes-execution –

+0

@DmitriyBotov:這是爲*一個*批次儘管如此,文件只。他們希望同時運行兩個,並且只有在兩個*都停止時才繼續執行。 – Joey

回答

7

可以,排序:

@echo off 
set Token=MAIN_%RANDOM%_%CD% 
start "%Token%_1" cmd /c child1.cmd 
start "%Token%_2" cmd /c child2.cmd 
:loop 
ping -n 2 localhost >nul 2>nul 
tasklist /fi "WINDOWTITLE eq %Token%_1" | findstr "cmd" >nul 2>nul && set Child1=1 || set Child1= 
tasklist /fi "WINDOWTITLE eq %Token%_2" | findstr "cmd" >nul 2>nul && set Child2=1 || set Child2= 
if not defined Child1 if not defined Child2 goto endloop 
goto loop 
:endloop 
echo Both children died. 

child1child2只是執行pause。這使用或多或少的唯一標記來標識子批處理文件。他們在一個自己的窗口中開始,並且每個窗口都有一個特定的窗口標題(start)。使用該窗口標題,我們可以使用tasklist再次找到它們,並確定它們是否仍在運行。

確定批處理文件是否仍在運行會有點棘手。 tasklist與窗口標題過濾器做它應該做什麼,但它不會返回一個明智的錯誤級別。這就是爲什麼我們必須通過findstr來獲取進程名稱(以避免通過選擇錯誤消息而對語言敏感)。

+0

工作正常!你知道它是否仍然可以按預定的任務工作嗎? – Helvio

相關問題