2012-12-21 43 views
6

我想运行一个批处理文件,启动其他批处理文件。我看了一个类似的问题张贴在这里: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 
+0

您可以参考这些答案:http://stackoverflow.com/questions/3023543/execute-batch-file-after-another-batch-file-completes – Finickyflame

回答

1

每当我有那种依赖于另一个批处理文件,我不是: 1.巢他们。这意味着,如果batch1需要在batch2之前运行,那么我在batch1中添加batch2。 2.在batch2中进行'睡眠'调用。这只有在您确实了解batch1的启动持续时间时才有可能。

样品睡眠命令是:

ping 127.0.0.1 -n 4 > null

这将使批处理文件等待3秒钟。 (因为只有3 1秒睡觉,每个4个回波之间)

实例:

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 
+0

我使用的这些批处理文件随附软件我有所以如果嵌套涉及到编辑这些批处理文件,我会犹豫如何处理它,以免我搞砸了。我想我可以创建一个备份文件。我对“ping 127.0.0.1 -n 4 null”行感到困惑。我将127.0.0.1识别为回送地址,但是我是否将其置于我的启动命令之间?如第1行所示:start cmd/k CALL batch2.bat第2行:ping 127.0.0.1 -n 4> null第3行:启动cmd/k CALL batch2.bat。 –

+0

谢谢,我已经试过这个,它的工作很棒。我很感激帮助。 –

4

答案:

添加/wait选项来启动命令。

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 

否则只是使用开始之间的平延迟。 (见user706837的答案)

参考文献:

TechnetRobSS64DosTips

+0

我很抱歉因为天真而来,但请记住,我是编程方面的新手。我最关心的是最后两条命令,我尝试使用“等待”,但我不确定是否正确。它不工作,我怎么尝试它:第1行:启动cmd/k CALL batch2.bat第2行:等待启动cmd/k batch3.bat。我必须使用反斜杠吗?我在哪里放置“等待”。在行首?开始后? –

+0

@DavidHorvath我已经更新了我的答案以显示一些示例。也欢迎学习批处理。这非常有趣和令人头痛。学习批次时的第一条规则是经常使用帮助'/?'选项。因此要理解你在命令提示符“start /?','call /?'和'cmd /?'中输入的每个命令。或访问Microsoft Technet页面。 http://technet.microsoft.com/en-us/library/cc772390(v=ws.10).aspx –

+0

非常感谢。我尝试了ping延迟,它正在工作。显然这有点粗糙,因为我不知道确切的时间,所以我只是玩弄不同的延迟,直到我得到最好的序列。 –

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 
+0

开始cmd/k有什么目的呢? –

+2

'START CMD/K'开始一个新的CMD过程,运行批处理文件然后退出。至少这是不必要的,并且如果批处理文件进行交互,可能会导致问题,即'batch1.bat'设置'batch2.bat'使用的变量等。 – aphoria

0

有多种方式。

1.

REM回波呼叫的

CALL一个。蝙蝠

REM回波呼叫乙

CALL b.bat

REM回波呼叫c

CALL C.BAT

REM暂停


2.

回波呼叫

开始CMD/K CALL a.bat

回波呼叫乙

开始CMD/K CALL b.bat

回波呼叫c

开始CMD/K CALL c.bat

pause


这里的区别是 -

启动CMD/K

它创造这么多的实例。所以我们可以看到多个CMD提示。

CALL

每个后代CALL等待以前调用完成。

+0

缩进问题在上述答案中存在。 – Chang

+0

如果有\t缩进问题确实修复它 –

相关问题