红色部分为解读,黑色部分为源码:
@echo off
以上语句作用是在命令提示符窗口隐藏下面的命令本身。
if "%OS%" == "Windows_NT" setlocal
以上语句作用是设置下面的命令的作用范围仅限于这个批处理文件
rem ---------------------------------------------------------------------------
rem Start script for the CATALINA Server
rem
rem $Id: startup.bat 758256 2009-03-25 13:43:00Z mturk $
rem ---------------------------------------------------------------------------
rem Guess CATALINA_HOME if not defined
以上语句以rem开头,全部是是注释。
set CURRENT_DIR=%cd%
以上语句的含义:%cd%代表批处理文件所在目录。这里定义了一个变量CURRENT_DIR等于批处理文件所在目录。
if not "%CATALINA_HOME%" == "" goto gotHome
以上语句含义是:如果没有定义CATALINA_HOME的环境变量,就跳转到gotHome处继续执行,负责执行下一条语句。
set CATALINA_HOME=%CURRENT_DIR%
含义是设置CATALINA_HOME为上面定义的当前目录CURRENT_DIR。
if exist "%CATALINA_HOME%/bin/catalina.bat" goto okHome
含义是:如果存在CATALINA_HOME环境变量设置的目录下的bin目录下的catalina.bat文件,就跳转到okHome处继续执行。
cd ..
set CATALINA_HOME=%cd%
上面两条语句的含义是:设置CATALINA_HOME为当前目录的上一级目录。
cd %CURRENT_DIR%
返回批处理文件所在目录。
:gotHome
定义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
不管是环境变量中设置的CATALINA_HOME目录或者当前批处理文件所在目录,只要存在/bin/catalina.bat,就跳转到okHome。否则报错后跳转到end。
:okHome
定义okHome断点
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
以上语句:如果%CATALINA_HOME%/bin/catalina.bat文件不存在,就报错并且跳转到end。
:okExec
定义okExec断点
rem Get remaining unshifted command line arguments and save them in the
set CMD_LINE_ARGS=
清空环境变量CMD_LINE_ARGS
:setArgs
if ""%1""=="""" goto doneSetArgs
%1代表通过命令窗口执行这个批处理文件时传递给这个文件的第一个参数,%2,%3以此类推。%0代表批处理文件名。这里的意思是判断如果没有参数,跳到doneSetArgs处执行。
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
在CMD_LINE_ARGS尾部追加当前参数。
Shift
参数+1
goto setArgs
执行循环知道没有参数为止。
:doneSetArgs
call "%EXECUTABLE%" start %CMD_LINE_ARGS%
执行catalina.bat命令并追加参数。
:end