2015-05-21 21 views
0

我有這個批處理文件:如何使一批等待多個子進程

SET WINRAR="C:\Program Files (x86)\WinRAR" 
start "" %WINRAR%\WinRAR.exe a -u -m5 "Group 1.rar" "Group 1" "Group 1" 
start "" %WINRAR%\WinRAR.exe a -u -m5 "Group 2.rar" "Group 2" "Group 2" 
start "" %WINRAR%\WinRAR.exe a -u -m5 "Group 3.rar" "Group 3" "Group 3" 
start "" "D:\" 

我希望所有的RAR進程在同時工作和RAR完成後打開的目錄D:\

回答

2

您可以通過啓動您的非RAR過程無/等待並檢查它們是否正在使用tasklist完做到這一點:

@ECHO OFF 
SET WINRAR="C:\Program Files (x86)\WinRAR" 
start "" %WINRAR%\WinRAR.exe a -u -m5 "Group 1.rar" "Group 1" "Group 1" 
start "" %WINRAR%\WinRAR.exe a -u -m5 "Group 2.rar" "Group 2" "Group 2" 
start "" %WINRAR%\WinRAR.exe a -u -m5 "Group 3.rar" "Group 3" "Group 3" 

:LOOP 
tasklist /FI "IMAGENAME eq WinRAR.exe" 2>NUL | find /I /N "WinRAR.exe">NUL 
if %ERRORLEVEL%==0 (
    ping localhost -n 6 >nul 
    GOTO LOOP 
) 
start "" "D:\" 

代碼執行以下操作:

首先,你開始你的所有un-rar進程。然後你檢查你的任務列表是否包含任何winrar.exe進程。如果是這種情況,請等待5秒鐘再次檢查。只要任務列表中沒有更多的winrar.exe條目,您就可以進入start "" "D:\"

編輯:正如你已經問過如何等待通過ping作品,這裏是解釋。 對不起,我的代碼中有一個錯誤。這是ping localhost -n 6而不是ping localhost -6

ping localhost -n 6>nul使您的系統在每次ping之間以1秒ping 6次本地主機。 6個ping之間有1秒鐘是5 :)由於本地主機在1毫秒內響應,你等待大約5秒鐘。 >nul supnsses您的控制檯中的ping命令的輸出。

+0

這是工作正常謝謝你很多...但什麼是-6是什麼意思?你能解釋一下嗎?那就意味着我必須像這樣編寫代碼ping localhost -6(5)> nul或ping localhost -6> nul ..謝謝 – Hauari

+0

我將編輯我的答案並解釋其含義。 – MichaelS

+0

完成。最後一句話:如果你想等待X秒,你必須執行'ping localhost -n X + 1'。 – MichaelS

1

恐怕這個解決方案不適合從批處理文件中獲取。你可以通過考慮外面的方式來實現這些選項,並實現一個完成這項工作的項目。

例如,一個很好的實現可以使用app.activate方法,它們允許您檢查是否存在某個名稱爲「alive」的窗口。

如果你選擇走這條道路,該解決方案是創建一個名爲「waitForAll.vbs」一個VBS文件(例如),並提供這樣的事情:

Dim objShell 
dim found 
dim nCount 

Set objShell = CreateObject("WScript.Shell") 

found = true 
nCount = 100 ' to avoid hangings 
do while found and nCount > 0 
    found = objShell.appActivate("CAPTION OF YOUR WINRAR WINDOWS") 
    wscript.sleep 5 * 1000 ' sleep for five seconds 
    nCount = nCount - 1 
loop ' found 

if not found then 
    ' launch whatever 
end if ' not found 

和而不是開始「 「d:\你必須向這個」waitForAll.vbs「程序中插入一個調用:程序將查找用戶空間中所有與winrar相似的窗口:當它們沒有找到時,它會開始任何你想要的。

(可選)如果winrar窗口掛起(帶有彈出消息或類似的東西),該程序最終通過nCount計數器結束。

+0

恐怕你錯了,批量比你想象的更強大;-)查看我的答案。 – MichaelS

+0

是的,我在完成寫作後纔讀到它。非常好的解決方案:D –