[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] [已解决]如何在并行批处理执行后再继续执行命令?

我想达到这效果:
1、执行一个循环,同时执行几个批处理,因为每个批处理时间比较长,希望并行执行
2、执行完这些同时执行的批处理后,还希望回到调用的批处理模块继续下面语句执行。

逻辑如下:
a.bat
  1. for /l %%i in (1 1 4) do start call b.bat  %%i
  2. 其他命令,基于并行调用b.bat执行后结果
复制代码
b.bat
  1. 批处理命令 %1%
  2. Exit
复制代码
请问如何让并行调用b.bat批处理都执行后,在继续返回a.bat执行?

[ 本帖最后由 askyer 于 2009-7-3 22:00 编辑 ]
1

评分人数

    • keen: 感谢主动给标题标注[已解决]字样PB + 2

直接应该无法实现。
改成start "并行%%i" call b.bat  %%i,然后判断窗口是否存在:
tasklist /fi "windowtitle eq 并行*" && 等待 || 执行下一步
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

思路:

需要用到临时文件:
子进程结果存放文件sou?.txt
子进程结束记录文件end.txt

把各个子进行的结果分别存为:sou1.txt sou2.txt ...sou?.txt
并且子进行结束时都往end.txt写入一个字符:set/p=0<nul>>end.txt

如果不想打开多个窗口,可以这样:start /b b.bat %%i
主进程打开完所在子进程后,测试end.txt的大小,并等待,当所有子进程完成后,也就是end.txt文件增加到了一定大小了,再处理各个子进程存放的结果文件:sou?.txt

TOP

谢谢2,3楼回复,方法都可行

做第二种方法是发现个问题
  1. :loop
  2. ping -n 2 127.1>nul
  3. tasklist /fi "windowtitle eq 并行*" |findstr "cmd.exe">nul&&(goto loop)
复制代码
运行到最后总会是多一个提示语句:信息: 没有运行的带有指定标准的任务。
感觉是重定向问题,最后一次找不到cmd.exe程序
但不知道怎么修改可以屏蔽掉这条消息?

TOP

回复 4楼 的帖子

可能是最后一个并行的批处理运行完回到最初的批处理时,再去检测是否有并行的批处理时,就会提示:信息: 没有运行的带有指定标准的任务。提示这个信息再去找cmd.exe程序,当然也是会找不到。
你可以根据的自己的程序再该进一下。

可以用2>nul屏蔽错误信息。
(*^_^*)

TOP

回复 5楼 的帖子

呵呵  试出来了 谢谢

TOP

返回列表