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

时间:2012-12-21 17:02:23

标签: batch-file

我想运行一个批处理文件,启动其他批处理文件。我查看了此处发布的类似问题:How to run multiple .BAT files within a .BAT file

我按照这个例子(特别是最后一个建议)而且它有效...部分。它确实启动了我需要的批处理文件。但是,为了使应用程序正常运行,这些批处理文件中的一些必须打开,然后在下一个批处理文件的下一个启动之前运行它们的过程几秒钟,否则它们将不会被注册。具体来说,第一个批处理文件启动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

4 个答案:

答案 0 :(得分:6)

您可以放弃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

答案 1 :(得分:4)

<强>答案:

/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延迟。 (见user706837的答案)

<强>参考文献:

TechnetRobSS64DosTips

答案 2 :(得分:1)

每当我有依赖另一个的批处理文件时,我: 筑巢意思是,如果batch1需要在batch2之前运行,那么我在batch1中添加batch2。 2.在batch2中进行“睡眠”调用。只有在您确定batch1的启动持续时间时才可以这样做。

示例睡眠命令是:

ping 127.0.0.1 -n 4 > null

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

示例:

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

答案 3 :(得分:1)

There are multiple ways for that.

1.

rem echo call A

CALL a.bat

rem echo call B

CALL b.bat

rem echo call C

CALL c.bat

rem pause

--------------------

2.

echo call A

start cmd /k CALL a.bat


echo call B

start cmd /k CALL b.bat

echo call C

start cmd /k CALL c.bat

pause

---------------------

Here the difference is-

start cmd /k

   It creates these many instances. So we can see multiple number of CMD prompts.


CALL

   Each descendent CALL waits for the completion of the previous CALL.