我们在使用tomcat免安装版时,最直接接触的就是这个文件。首先要明白一点,这个文件其中的内容其实就是一条条的doc命令。tomcat就是通过它来启动tomcat服务的。
@echo off(DOS在运行批处理时,会依次执行批处理中的每条命令,并且 会在显示器上显示,如果你不想让它们显示,可以加一个“echo off”,当然,“echo off”也是命令,它本身也会显示,如果连这条也不显示,就在前面加个“@”。)
if "%OS%" == "Windows_NT" setlocal(判断操作系统是否为Windows_NT,当然了windows_NT 也就是我们目前见到的所有的windows系统,如果是的话 就执行setlocal 方法,这是开始批处理文件中环境改动的本地化操作。在执行SETLOCAL之后所做的环境改动只限于批处理文件。要还原原先的设置,必须执行ENDLOCAL。达到批处理文件结尾时,对于该批处理文件的每个尚未执行的SETLOCAL命令,都会有一个隐含的ENDLOCAL被执行。)
rem ---------------------------------------------------------------------------
rem Start script for the CATALINA Server
rem ---------------------------------------------------------------------------
(rem 就是注释,其中包括解释作用和注释某句代码的作用)
rem Guess CATALINA_HOME if not defined
set "CURRENT_DIR=%cd%"(
设置
CURRENT_DIR
为当前目录
设置
CURRENT_DIR
为当前目录
设置
CURRENT_DIR
为当前目录
设置
CURRENT_DIR
为当前目录
设置CURRENT_DIR 为当前目录)if not "%CATALINA_HOME%" == "" goto gotHome(这条语句是检测CATALINE_HOME的值是否为空,如果不为空,执行gotHome标记处)
set "CATALINA_HOME=%CURRENT_DIR%"(检测CATALINE_HOME的值是为空,那么设置CATALINE_HOME的值为当前路径)
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%"(回到startup.bat所在的目录)
:gotHome
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome("如果CATALINA_HOME%\bin\catalina.bat路径存在,则执行okhome标记处)
echo The CATALINA_HOME environment variable is not defined correctly(打印CATALINA_HOME环境错误)
echo This environment variable is needed to run this program(打印信息)
goto end
:okHome
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"(设置EXECUTABLE变量的值)
rem Check that target executable exists
if exist "%EXECUTABLE%" goto okExec(如果EXECUTABLE值存在,就执行okExec标记)
echo Cannot find "%EXECUTABLE%"(否则打印无法找到EXECUTABLE的值)
echo This file is needed to run this program
goto end
: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(如果第一个参数为空,执行doneSetArgs,第0个参数代表的是文件名)
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 (设置CMD_LINE_ARGS的参数,配合shift参数一位命令一直追加参数)
shift(参数移位命令)
goto setArgs(跳转到setArgs,检查%1是否为空,如果不空,继续追加参数。。。)
:doneSetArgs
call "%EXECUTABLE%" start %CMD_LINE_ARGS%
(启动EXECUTABLE环境变量所指向的程序,也就是catalina.bat,其后跟的第一个参数是start,所以要启动Tomcat内核,如果其后跟的第一个参数是stop,则停掉Tomcat,当然,另外还要把CMD_LINE_ARGS作为参数传递进去。)
:end
这里我们在做一下这个:setArgs(设置参数)的补充:
写了个测试批处理文件:test.bat
echo %0 %1 %2
这个批处理文件只有一条语句,如果我们在命令行下这样执行:test.bat a b c
那么结果就会打印出test.bat a b
说明:%0 %1 %2都表示变量
%0表示这个批处理文件的文件名,%1表示传递给该批处理文件的第一个参数,%2表示传递给该批处理文件的第二个参数,一直可以用这个方法传递9个参数,即使用到9%,但是如果参数再多了,应该如何处理呢?
这时候shift命令就派上用场了~
现在我们来更改test.bat,内容如下:
shift
echo %0 %1 %2
做了这些更改之后,同样执行上面的命令:test.bat a b c
打印的结果就是a b c
shift这个命令的作用就是把传递的参数依次前移,这样%0就代表了a,%1代表b,%2代表c。