用bat批處理啟動、關閉控制台程序


調用方要求把windows下幾個互相調用的web服務封裝為exe形式。為了方便調用方使用,要求提供啟動和關閉bat腳本。

啟動腳本start.bat

@echo off
set port_backend=5000
start "ne_backend" cmd /k call start_backend.bat
echo 等待后端啟動完成...
:start
for /f "tokens=3 delims=: " %%a in ('netstat -an') do (
if "%%a"=="%port_backend%" goto end
)
goto start

:end
echo 啟動前端...
start "ne_frontend" cmd /k call start_frontend.bat
exit

總腳本負責維護啟動順序和端口。

一共啟動2個exe,一個backeend 一個frontend 位置不同。

通過等待端口,判斷backen啟動完成,用goto語句 跳出循環,然后再啟動下一個frontend

所以單獨寫兩個各自的啟動腳本start_backend.bat  start_frontend.bat

用start  新啟動每個窗口。start的第一個參數 規定了啟動后控制台的窗口 title文字。用於關閉時根據這個關閉。 這樣避免了具體exe的名字

最后是exit 全部啟動完畢后,這個start.bat總腳本就退出了,只剩2個獨立的控制台在運行。

 

具體啟動腳本大同小異,主要是切換當前工作路徑(current work Directory),直接啟動exe程序,也不退出。

start_backend.bat

@echo off
%~d0
cd %~dp0
cd "./backend"
app

start_frontend.bat

@echo off
%~d0
cd %~dp0
frontend

 

關閉腳本end.bat

@echo off
taskkill /fi "WindowTitle eq ne_frontend*"
taskkill /fi "WindowTitle eq ne_backend*"

因為實際窗口名是這樣的:

但是我懶得抄后面啰嗦的語句了,而且有空格 也不知道怎么嵌套進 

"WindowTitle eq ne_frontend*"  

這樣的雙引號語句里。所以干脆用*模糊匹配了。

但是  萬一系統里其他運行的exe(或者啟動了我們的exe之后,又啟動了別的exe),恰好別的exe的窗口title和我們這倆前綴重名,運行end.bat 就可能關閉錯了。

為了防止這個問題,在start.bat腳本里 對每個窗口名都加了自定義前綴"ne_" 也可以加別的,更復雜點,保證沒別的程序會這樣。

有點類似C++用#if define 防止重復include 頭文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM