startup.bat 脚本
startup.bat
脚本,位于%CATALINA_HOME%\bin
目录下。
%CATALINA_HOME%
,代表tomcat软件的安装目录。
准备工作
关闭回显
@echo off
echo
回显命令,将指定内容显示到控制台上。
回显,就是显示正在执行的批处理命令,及执行的结果等
@
关闭紧跟在该字符后面的命令的回显。
echo off
关闭该命令后,所有其他命令的回显。
@echo off
关闭echo off
命令的回显,并且关闭该命令后,所有其他命令的回显
注意,这里的关闭回显,是指不显示正在执行的批处理命令,但仍显示执行的结果。
文档说明
rem ---------------------------------------------------------------------------
rem Start script for the CATALINA Server
rem ---------------------------------------------------------------------------
注释,说明这是CATALINA
服务器的启动脚本。
rem
单行注释命令,被注释的行不会被执行。但如果echo on
回显被打开状态,会显示正在执行的rem
命令。
::
同样是单行注释命令,区别在于,即使echo on
状态,也不会显示正在执行的::
命令。
确保CATALINA_HOME
正确
setlocal
rem Guess CATALINA_HOME if not defined
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%"
如果%CATALINA_HOME%
已设置,就跳转到gotHome
,来确认它是否真的是tomcat安装目录。
如果%CATALINA_HOME%
未设置,就将当前目录%CURRENT_DIR%
设置成%CATALINA_HOME%
,并确认当前目录是否真的是tomcat安装目录。
如果当前目录%CURRENT_DIR%
也不是tomcat安装目录,就将当前目录的父目录..
设置成%CATALINA_HOME%
,并继续执行gotHome
,来确认父目录是否真的是tomcat安装目录。
:gotHome
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHome
如果前面设置的%CATALINA_HOME%
确实是tomcat安装目录,跳转到okHome
。
如果%CATALINA_HOME%
不是tomcat安装目录,打印提示未设置或未正确设置必要的环境变量,并跳转到end
批处理文件末尾,结束启动操作。
setlocal
和:okHome
之间的批处理命令,确保了在未设置%CATALINA_HOME%
环境变量时,直接在tomcat安装目录下,执行bin\startup.bat
,或者在安装目录下的bin
目录中,执行startup.bat
,是可行的。但是不建议这么做。
确保定位catalina.bat
文件
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
rem Check that target executable exists
if exist "%EXECUTABLE%" goto okExec
echo Cannot find "%EXECUTABLE%"
echo This file is needed to run this program
goto end
:okExec
设置%EXECUTABLE%
,指定要执行的批处理文件%CATALINA_HOME%\bin\catalina.bat
。
设置成功,跳转到okExec
。
读取并保存命令行参数
获取其余未移位的命令行参数,并将它们保存在CMD_LINE_ARGS
中。
rem Get remaining unshifted command line arguments and save them in the
set CMD_LINE_ARGS=
:setArgs
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift
goto setArgs
:doneSetArgs
如果没有命令行参数,直接跳转到doneSetArgs
。
%[1-9]
表示参数。参数,是指在运行批处理文件时,在文件名后加的以空格(或者
Tab
)分隔的字符串。变量可以从%0
到%9
,%0
表示批处理命令本身,其它参数字符串用%1
到%9
顺序表示。
如果有参数,则将所有参数依次读取保存到CMD_LINE_ARGS
中。
shift
命令,用于更改批处理文件处理参数的方式,如指定起始处理参数的位置等
shift [/n]
设置批处理从第n个参数开始移位,n的值为0~8。
执行catalina.bat
文件
call "%EXECUTABLE%" start %CMD_LINE_ARGS%
:end
调用catalina.bat
脚本,将start %CMD_LINE_ARGS%
做为命令行参数传入。
call
语法
CALL [drive:][path] filename [batch-parameters]
其中参数
[Drive:][Path] FileName
,就是指定要调用的批处理程序的位置和名称。注意,参数filename
必须具有.bat
或.cmd
扩展名,才能被调用。
[batch-parameters]
就是输入的参数该命令,主要用于在一个脚本A中,调用另一个脚本B。等脚本B执行完毕,继续脚本A的执行。
start
语法
START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED][/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL] [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B] [command/program] [parameters]
主要的用途就是直接调用程序,所有的dos和命令行程序都可以由其启动。
区别
调用的程序类型不一样。
call
必须是bat脚本。调用的方式不一样。
call
会暂停当前脚本,等待调用的脚步运行结束后,再运行当前脚本;
start
会开启一个新窗口直接调用程序,相当于启动一个新的进程运行程序。当前脚本不会等待调用的程序运行结束。