2015-05-21 18 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 –