2012-12-21 42 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縮進問題確實修復它 –

相關問題