使用步骤:
- 新建文本文档
- 将以下代码复制到里边
- 将名称改为start.bat(名无所谓,后缀是bat就行)
- 在文件同路径下,创建一个conf文件(没有后缀)
- 在conf文件中,写入配置信息
- 启动后选择要启动的项目
- 选择要启动的tomcat(多个tomcat使用空格分割)
配置文件示例:
~项目1
^tomcat8080 8080 D:\Program`Files\apache-tomcat-8080
^tomcat8081 8081 D:\Program`Files\apache-tomcat-8081
^tomcat8082 8082 D:\Program`Files\apache-tomcat-8082
~项目2
^tomcat8090 8090 D:\Program`Files\apache-tomcat-8090
^tomcat8091 8091 D:\Program`Files\apache-tomcat-8091
配置文件规则:
项目使用 ~(shift+1前边那个)开头
tomcat使用 ^(shift+6)开头
空格使用 `(英文状态下,1前边那个)替换
第一个参数为tomcat标识 第二个参数为端口号 第三个参数为tomcat所在路径
每个配置项占一行
@ECHO off
CHCP 65001>NUL
SETLOCAL enabledelayedexpansion
REM 文件
SET "file=conf"
rem 项目数量(保存项目数量)
SET /a count=0
REM 读取项目名称和子系统
FOR /f "delims=" %%a IN ('TYPE "%file%"') DO (
SET "line=%%a"
SET "firstChar=!line:~0,1!"
SET "line=!line:~1!"
IF /i "!firstChar!"=="~" (
SET /a count+=1
SET "project[!count!].name=!line!"
SET /a project[!count!].tomcatCount=0
SET /a tomcatCount=0
) ELSE (
SET /a tomcatCount+=1
SET /a project[!count!].tomcatCount+=1
FOR /f "tokens=1,2,*" %%x IN ("!line!") DO (
SET "project[!count!].tomcat[!tomcatCount!].name=%%x"
SET "project[!count!].tomcat[!tomcatCount!].host=%%y"
SET "project[!count!].tomcat[!tomcatCount!].path=%%z"
)
)
)
:selectProject
ECHO 0. 所有项目
FOR /l %%i IN (1, 1, !count!) DO (
ECHO %%i. !project[%%i].name!
)
SET /p "projNumber=请输入项目序号:"
IF "!projNumber!" gtr "!count!" (
ECHO 输入错误,请重新选择!
GOTO selectProject
) ELSE IF "!projNumber!" leq "0" (
CALL :forTomcat 1 !count! 1 0
) ELSE (
CALL :selecedTomcat !projNumber!
)
ENDLOCAL
GOTO :eof
:selecedTomcat
SET "index=%~1"
SET tomcatCount=
ECHO 0. 所有项目
FOR /l %%i IN (!index!, 1, !index!) DO (
SET "param1=!project[%%i].name!"
SET "tomcatCount=!project[%%i].tomcatCount!"
FOR /l %%j IN (1, 1, !tomcatCount!) DO (
SET "tomcatName=!project[%%i].tomcat[%%j].name!"
ECHO %%j. !tomcatName!
)
)
SET /p "tomcatNumber=请输入Tomcat序号(多个序号使用空格分割):"
IF "!tomcatNumber!" gtr "!tomcatCount!" (
ECHO 输入错误,请重新选择!
GOTO selecedTomcat
) ELSE IF "!tomcatNumber!" leq "0" (
CALL :forTomcat !index! !index! 1 0
) ELSE (
FOR %%e IN (!tomcatNumber!) DO (
CALL :forTomcat !index! !index! %%e %%e
)
)
ENDLOCAL
GOTO :eof
:forTomcat
SETLOCAL enabledelayedexpansion
SET "startIndex=%1"
SET "endIndex=%2"
SET "startTomcatIndex=%3"
SET "endTomcatIndex=%4"
FOR /l %%i IN (!startIndex!, 1, !endIndex!) DO (
SET "tomcatCount=!project[%%i].tomcatCount!"
IF "!startTomcatIndex!" equ "0" (
SET "startTomcatIndex=!tomcatCount!"
)
IF NOT "!endTomcatIndex!" equ "0" (
SET "tomcatCount=!endTomcatIndex!"
)
FOR /l %%j IN (!startTomcatIndex!, 1, !tomcatCount!) DO (
SET "param2=!project[%%i].tomcat[%%j].name!"
SET "param3=!project[%%i].tomcat[%%j].host!"
SET "param4=!project[%%i].tomcat[%%j].path!"
CALL :startTomcat !param1! !param2! !param3! !param4!
)
)
ENDLOCAL
GOTO :eof
:startTomcat
SETLOCAL enabledelayedexpansion
SET "projectName=%1"
SET "TITLE=%2"
SET "host=%3"
SET "CATALINA_HOME=%4"
SET "TITLE=!projectName!-!TITLE!"
SET "CATALINA_HOME=!CATALINA_HOME:`= !"
SET "CMD_LINE_ARGS="
CD !CATALINA_HOME!\bin
SET "CURRENT_DIR=%CD%"
IF NOT "%CATALINA_HOME%" == "" GOTO gotHome
SET "CATALINA_HOME=%CURRENT_DIR%"
IF EXIST "%CATALINA_HOME%\bin\catalina.bat" GOTO okHome
CD ..
SET "CATALINA_HOME=%CD%"
CD "%CURRENT_DIR%"
:gotHome
IF EXIST "%CATALINA_HOME%\bin\catalina.bat" GOTO okHome
GOTO end
:okHome
SET "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
IF EXIST "%EXECUTABLE%" GOTO okExec
GOTO end
:okExec
SET CMD_LINE_ARGS=
:setArgs
IF ""%1""=="""" GOTO doneSetArgs
SET CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
SHIFT
GOTO setArgs
:doneSetArgs
FOR /f "tokens=1-5" %%i IN ('netstat -ano^|findstr ":!host!"') DO (
IF NOT "%%m" == "" (
CALL "%EXECUTABLE%" stop %CMD_LINE_ARGS%
REM 使用以下方式,可直接强行关闭
REM TASKKILL /PID %%m /F
)
)
PING 127.0.0.1 -n 1 -w 300 > NUL
CALL "%EXECUTABLE%" start %CMD_LINE_ARGS%
:end