Cmd 使命令提示符等待

Cmd 使命令提示符等待,cmd,batch-processing,Cmd,Batch Processing,我已经按顺序执行了这组批处理文件。我想把它交出来,让它们并行执行。我已经用start cmd/c完成了。现在,这将为它们中的每一个生成新的命令提示符窗口。假设在此之后有一些语句集。我想确保它们只有在所有分叉的批处理文件完成后才能执行。如何做到这一点 假设每个文件所用的平均时间为: JBOSSbuildWar-30分钟 WeblogicbuildWar-35分钟 FEBAPortletWebWar-30分钟 buildStaticJBoss-35分钟 由于主命令提示符窗口在30分钟内完成了它的任务

我已经按顺序执行了这组批处理文件。我想把它交出来,让它们并行执行。我已经用start cmd/c完成了。现在,这将为它们中的每一个生成新的命令提示符窗口。假设在此之后有一些语句集。我想确保它们只有在所有分叉的批处理文件完成后才能执行。如何做到这一点

假设每个文件所用的平均时间为: JBOSSbuildWar-30分钟 WeblogicbuildWar-35分钟 FEBAPortletWebWar-30分钟 buildStaticJBoss-35分钟


由于主命令提示符窗口在30分钟内完成了它的任务,而分叉批处理文件还需要5分钟才能完成,因此我希望主命令命令等待其他命令完成。请提供帮助。

您可以在每个命令之前添加此计时器功能:

@调用JBOSSbuildWar.bat>。\logs\JBOSSbuildWar\u out 2>。\logs\JBOSSbuildWar\u err

超时/t 60/nobreak>nul

启动cmd/c@call WeblogicbuildWar.bat>。\logs\WeblogicbuildWar\u out 2>。\logs\WeblogicbuildWar\u err

超时/t 60/nobreak>nul

启动cmd/c@call FEBAPortletWebWar.bat>。\logs\FEBAPortletWebWar\u out 2>。\logs\FEBAPortletWebWar\u err

超时/t 60/nobreak>nul

启动cmd/c@call buildStaticJBoss.bat>。\logs\JBOSSFEBAStaticWar\u out 2>。\logs\JBOSSFEBAStaticWar\u err

Ps:60代表1分钟,如果您想要30分钟,请将其更改为1800

在你的主要批次中

@call JBOSSbuildWar.bat > ..\logs\JBOSSbuildWar_out 2> ..\logs\JBOSSbuildWar_err

start cmd /c @call WeblogicbuildWar.bat > ..\logs\WeblogicbuildWar_out 2> ..\logs\WeblogicbuildWar_err

start cmd /c @call FEBAPortletWebWar.bat > ..\logs\FEBAPortletWebWar_out 2> ..\logs\FEBAPortletWebWar_err

start cmd /c @call buildStaticJBoss.bat > ..\logs\JBOSSFEBAStaticWar_out 2> ..\logs\JBOSSFEBAStaticWar_err
然后在每(3)个子
.bat
文件中,创建一个文件
%temp%\x.processfinished”
,其中x=1表示第一个进程,2表示第二个进程,依此类推

当子进程启动时,该过程会等待,直到每个进程都创建了自己的“.processcompleted”文件,方法是检查3个进程中是否有一个丢失,如果丢失,则超时1秒,然后再次查看。只有当这3个文件存在时,它才会继续

在所有的可能性中,最好是子进程可以采用一个额外的参数(这个子进程的“processfinished”文件的名称),而不是每个子进程都有一个固定的数字

您可以扩展它,并使用日期和时间来增加文件名,这样整个过程本身就可以并行运行多次

顺便说一句-通过使用

del "%temp%\*.processfinished" >nul 2>nul
...
start ....whatever1.bat...
start ....whatever2.bat...
start ....whatever3.bat...
...
wait4all:
for /L %%a in (1,1,3) do if not exist "%temp%\%%a.processfinished" timeout /t 1 >nul &goto wait4all
:: continues here when all (3) processes have finished.
del "%temp%\*.processfinished" >nul 2>nul
您可以删除所有前导的
@
s(所做的只是抑制该行的命令报告。)


另外,
start
start”“……
一样更快乐,也就是说,在引号中有一个空窗口标题作为其第一个参数。这允许在必要时“引用”其他参数-使用的第一个“引用”参数用作流程的“窗口标题”,可能会丢失给子流程。常规地分配一个虚拟的(如有必要为空)“窗口标题”意味着您以后不会被这个问题绊倒。

有多个命令,您可以选择使用哪个命令

暂停

将暂停cmd,直到用户按任意键。 显示消息“按任意键继续…” 我使用这个命令的一种变体,称为pause>nul。 它所做的是暂停.bat,但不显示消息,您只会得到一个空白屏幕

超时

多个语法,非常有用的命令,经常使用这个。 示例代码:超时10 可以通过按键绕过 将命令的执行暂停10秒。 您也可以这样构造它:TIMEOUT 10/nobreak 这不允许用户按键跳过它,他们必须忍受它

Ping

非常好的一个。 语法如下:ping1.1.1.1-n1-w60000>NUL 可能是三者中最复杂的。 PING可用于将执行延迟数秒

希望我能帮忙! -洛根

@echo off