Batch file 如何从一个具有依赖关系的批处理文件启动多个批处理文件?

Batch file 如何从一个具有依赖关系的批处理文件启动多个批处理文件?,batch-file,Batch File,我想运行一个批处理文件,启动其他批处理文件。我在这里看到了一个类似的问题: 我遵循了这个例子(特别是最后一个建议),它起了部分作用。它确实启动了我需要的批处理文件。但是,为了使应用程序正常运行,必须打开其中一些批处理文件,然后在下一批处理文件启动之前运行几秒钟,否则它们将无法注册。具体来说,第一个批处理文件启动一个web应用程序服务器(JBOSS 5.1),然后下一个批处理文件打开一个池管理器,然后其他两个启动分发服务器。当我运行调用其他批处理文件时,它们几乎同时启动,并且彼此不注册。我甚至可以

我想运行一个批处理文件,启动其他批处理文件。我在这里看到了一个类似的问题:

我遵循了这个例子(特别是最后一个建议),它起了部分作用。它确实启动了我需要的批处理文件。但是,为了使应用程序正常运行,必须打开其中一些批处理文件,然后在下一批处理文件启动之前运行几秒钟,否则它们将无法注册。具体来说,第一个批处理文件启动一个web应用程序服务器(JBOSS 5.1),然后下一个批处理文件打开一个池管理器,然后其他两个启动分发服务器。当我运行调用其他批处理文件时,它们几乎同时启动,并且彼此不注册。我甚至可以用批处理文件来做这件事吗?或者我必须进入其他批处理文件的代码并在那里进行更改吗?我想不惜一切代价避免这种情况

以下是我到目前为止的情况:

start cmd /k CALL D:\jboss-5.1.0.GA-jdk6\jboss-5.1.0.GA\bin\run.bat

start cmd /k CALL batch1.bat

start cmd /k CALL batch2.bat

start cmd /k CALL batch3.bat

每当我有依赖于其他文件的批处理文件时,我会: 1.筑巢;也就是说,如果batch1需要在batch2之前运行,那么我会在batch1中添加batch2。 2.在batch2中设置“睡眠”呼叫。这只有在您相当确定batch1的启动持续时间时才可能

示例睡眠命令是:

ping 127.0.0.1-n4>null

这将使批处理文件等待3秒钟。(因为在4个回声之间只有3.1秒的睡眠时间)

示例:

start cmd /k CALL D:\jboss-5.1.0.GA-jdk6\jboss-5.1.0.GA\bin\run.bat
ping 127.0.0.1 -n 4 > null
start cmd /k CALL batch1.bat
ping 127.0.0.1 -n 4 > null
start cmd /k CALL batch2.bat
ping 127.0.0.1 -n 4 > null
start cmd /k CALL batch3.bat

回答:

start /wait cmd /k CALL D:\jboss-5.1.0.GA-jdk6\jboss-5.1.0.GA\bin\run.bat

start /wait cmd /k CALL batch1.bat

start /wait cmd /k CALL batch2.bat

start /wait cmd /k CALL batch3.bat
/wait
选项添加到start命令

WAIT        Start application and wait for it to terminate.
示例:

start /wait cmd /k CALL D:\jboss-5.1.0.GA-jdk6\jboss-5.1.0.GA\bin\run.bat

start /wait cmd /k CALL batch1.bat

start /wait cmd /k CALL batch2.bat

start /wait cmd /k CALL batch3.bat
否则,只需在启动之间使用ping延迟。(参见用户706837的回答)

参考文献:

start /wait cmd /k CALL D:\jboss-5.1.0.GA-jdk6\jboss-5.1.0.GA\bin\run.bat

start /wait cmd /k CALL batch1.bat

start /wait cmd /k CALL batch2.bat

start /wait cmd /k CALL batch3.bat

您可以放下
start cmd/k
,只需使用
CALL

CALL D:\jboss-5.1.0.GA-jdk6\jboss-5.1.0.GA\bin\run.bat
CALL batch1.bat
CALL batch2.bat
CALL batch3.bat

您可以参考以下答案:很抱歉给人的印象是幼稚,但请记住,我对编程非常陌生。我最关心的是最后两个命令,我尝试使用“WAIT”,但我不确定是否正确。我尝试的方式不起作用:第1行:start cmd/k CALL batch2.bat第2行:WAIT start cmd/k batch3.bat。我必须用反斜杠吗?我该把“等待”放在哪里。在队伍的开头?开始后?@DavidHorvath我更新了我的答案以展示一些例子。也欢迎来到学习批。这既有趣又令人头痛。学习批处理时的第一条规则是经常使用帮助
/?
选项。因此,要理解您正在使用的每个命令,请在命令提示符下键入
start/?
call/?
、和
cmd/?
。或者访问microsoft technet页面。非常感谢你。我尝试了ping延迟,它正在工作。显然,这有点粗糙,因为我不知道确切的时间,所以我只是玩不同的延迟,直到我得到最好的序列。我也只是尝试开始/等待…它工作得更好。再次感谢你的帮助。我还把微软的technet页面加入了书签。我有一种感觉,我将广泛地引用它。我使用的这些批处理文件与我安装的软件一起提供,因此,如果嵌套涉及编辑这些批处理文件,我会犹豫是否要这样做,以防我把事情搞砸。我想我可以创建一个备份文件。我对“ping127.0.0.1-n4>null”行感到困惑。我识别127.0.0.1作为环回地址,但我是否将其放在启动命令之间?如第1行:start cmd/k CALL batch2.bat第2行:ping 127.0.0.1-n 4>null第3行:start cmd/k CALL batch2.bat。谢谢,我已经尝试过了,效果很好。非常感谢您的帮助。启动cmd/k有什么用途呢?
start cmd/k
启动一个新的
cmd
进程,运行批处理文件,然后退出。至少这是不必要的,如果批处理文件相互作用,可能会导致问题,即
batch1.bat
设置
batch2.bat
使用的变量等。上述答案中存在缩进问题。如果存在缩进问题,请解决它