我有这个批处理文件:
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:\
。
答案 0 :(得分:3)
您可以通过在没有/ WAIT的情况下启动非rar流程并检查他们是否已使用@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:\"
完成来实现此目的:
start "" "D:\"
代码执行以下操作:
首先,您启动所有非rar进程。然后检查您的任务列表是否包含任何winrar.exe进程。如果是这种情况,请等待5秒钟再次检查。只要任务列表中没有更多winrar.exe条目,您就可以转到ping localhost -n 6
。
编辑:正如您已经问过ping的等待方式,这里有解释。
对不起,我的代码中有一个错误。它是ping localhost -6
而不是ping localhost -n 6>nul
。
>nul
使您的系统ping每次ping主机6次,每次ping 1秒。 6个ping,1秒之间是5 :)当localhost在1 ms内响应时,你等待大约5秒钟。 {{1}}在控制台中支持ping命令的输出。
答案 1 :(得分: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计数器结束。