2010-05-21 119 views
3

我有以下問題:退出/ B 0不起作用

我創建了一個批處理腳本調用自己在那裏(對於能夠並行寫入日誌)。在腳本中,我啓動了另一個進程(如start startServer.bat),它啓動了一個java進程並始終保持開放。

我在原來的劇本我等待30秒,檢查進程正在運行,做一個:

exit /B 0 

不幸的是不起作用,窗口顯示,退出/ B 0正在評估,但窗戶仍然保持開放。當我用另一個進程關閉窗口(意思是在我的.bat中啓動「子進程」進程)時,我的腳本繼續運行。

所以:

scriptA.bat

-> in there I call: start startServer.bat 
-> wait 30 seconds 
-> check is server is started 
-> exit /B 0 
Process hangs up! 

什麼是很奇怪的,如果我換另一個腳本各地,如:

scriptB.bat

-> call scriptA.bat 
-----> in there I call: start startServer.bat 
-----> wait 30 seconds 
-----> check if server is started 
-----> exit /B 0 
-> scriptA.bat continues without any hangup! 

我也是與出口0(沒有/ B)也一樣,同樣的結果!在第一種情況下,它掛斷了,在第二種情況下我的窗戶如預期的那樣關閉......

有沒有人曾經有過這樣的問題,並知道這裏有什麼問題? 進程掛斷!

回答

6

有所有的選項,在這裏退出批處理腳本一個很好的解釋: http://www.robvanderwoude.com/exit.php

具體來說,從該頁面:

的DOS聯機幫助(HELP EXIT)並不能使它清除/ B參數退出腳本的當前實例,它不一定與退出當前腳本相同。 也就是說如果腳本處於CALLed代碼段中,則EXIT/B將退出CALL,而不是腳本。

所以你絕對不想在這種情況下exit /b 0。如果只是exit 0不起作用,請嘗試GOTO:EOF

+0

但轉到:EOF我不能來伸手,一個錯誤級別,對不對? :S – murxx 2010-05-21 12:01:17

+0

我試着用goto:EOF但沒有區別: D:> goto:EOF 然後這個過程一直掛起,直到我關閉其他進程窗口! ( – murxx 2010-05-21 12:03:21

0

我想你的問題在於start命令。從start /? help以下摘錄可能指向問題:

命令/程序

如果是,則命令處理器 運行與/ K內部cmd命令或 批處理文件切換到cmd.exe。 這意味着命令運行後窗口將保持爲 。

如果它不是一個內部cmd命令 或批處理文件,那麼它是一個程序和 將運行,可以是窗口化 應用程序或控制檯應用程序。

作爲一個解決方案,你可以嘗試修改這樣的啓動命令:

start "" cmd /c "startServer.bat" 
+0

不,正如我所說的它的工作原理如下不起作用,以及... : 呼叫scriptA.bat> log.txt的 ----->在那裏我打電話:開始startServer.bat 在此之前,我用: 呼叫scriptA.bat | T恤的log.txt ----->在那裏我打電話:開始startServer.bat 隨着開球的命令,它不工作了,whyeverso ... – murxx 2010-05-21 14:33:15

+0

@murxx:感謝您的反饋,一般情況下您應該儘可能多地發佈您的問題的詳細信息,否則很難「猜出」問題的發現地點。 另外,你應該開始t他喜歡接受你的問題的有用答案。 – 2010-05-21 15:31:35