我写了下面的批处理脚本,如果它没有出现在环境中,它会要求一个JAVA_HOME
path,然后validationjava版本。 但在识别java版本之前,还应该检查java
是否存在于path中(可以执行)。 请帮我弄清楚是否可以执行java -version
并显示正确的消息
@echo off setlocal set VERSION5="1.5" IF "%JAVA_HOME%" == "" ( echo Enter path to JAVA_HOME: set /p JAVA_HOME= goto check_java_version ) ELSE ( echo Using %JAVA_HOME% goto check_java_version ) :check_java_version for /f "tokens=3" %%g in ('%JAVA_HOME%\jre\bin\java -version 2^>^&1 ^| findstr /i "version"') do ( set JAVAVER=%%g ) set JAVAVER=%JAVAVER:"=% set JAVAVER=%JAVAVER:java version =% for /f "delims=. tokens=1-3" %%v in ("%JAVAVER%") do ( set VER=%%w ) if not "%VER%" GEQ "5" goto wrong_version set JAVA_BIN=%JAVA_HOME%\jre\bin goto correct_java_version :correct_java_version REM echo JAVA Version is ok. set JAVA_LIB=%cd%/lib %JAVA_BIN%/java -cp %JAVA_LIB%/csm-runtime-1.0.jar;%JAVA_LIB%/groovy-all-1.8.1.jar;%JAVA_LIB%/commons-beanutils-1.8.3.jar;%JAVA_LIB%/csm-dbutil-1.0.jar;%JAVA_LIB%/commons-exec-1.1.jar;%JAVA_LIB%/log4j-1.2.8.jar;%JAVA_LIB%/commons-cli-1.2.jar -Dlog4j.configuration=com/ABC/csm/log4j.xml -Dendorsed_plugins_dir=./plugins com.ABC.csm.CSMMain %* goto end_java_version :wrong_version echo Current JDK Version %VER% echo Expected JDK %VERSION5% or greater. Please fix your SSATOP and try again. goto end_java_version :no_java echo No JDK found in %JAVA_HOME%. goto wrong_version :end_java_version endlocal
1的无效条件的例子是,而不是提供JAVA_HOME
ie e:\ csm \ java我把它作为e:\ csm \ java \ jre \ bin在这种情况下应该显示正确的错误信息, please provide a JAVA_HOME
path
要检查PATH
是否存在程序,windows批量提供了SET
命令的~%PATH:
选项。 请参阅HELP CALL
或HELP FOR
。
使用这段代码作为一个起点。
:ProgInPath set PROG=%~$PATH:1 goto :eof
像这样使用它
call :ProgInPath java.exe IF "%PROG%" == "" ( echo Java.exe not found ) else ( echo. %PROG% )
在这个例子中,如果java.exe
在PATH
,它会回应它的完整filespec。
我使用下面的代码片段,它解决了我的问题
:check_java_existence IF EXIST %JAVA_HOME%\jre\bin\java.exe ( echo java exists ) ELSE ( echo java does not exists )