I wrote the below batch script which asks for a JAVA_HOME
path if its not present in environment, and then it verifies the java version. but before identifying java version it should also check whether java
is present in the path (can be executed) or not. Please help me figure out if java -version
can be executed or not and display proper message
@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 of the examples of invalid condition would be, instead of providing JAVA_HOME
i.e., e:\csm\java I gave it as e:\csm\java\jre\bin which in this case should display proper error 开发者_JAVA技巧message that please provide a JAVA_HOME
path
To check the existence of a program in the PATH
, windows batch provides the ~%PATH:
option of the SET
command. See HELP CALL
or HELP FOR
.
Use this piece of code as a starting point.
:ProgInPath
set PROG=%~$PATH:1
goto :eof
and use it like this
call :ProgInPath java.exe
IF "%PROG%" == "" (
echo Java.exe not found
) else (
echo. %PROG%
)
in this example, if java.exe
is in the PATH
, it echoes its complete filespec.
I used the below snippet and it solved my problem
:check_java_existence
IF EXIST %JAVA_HOME%\jre\bin\java.exe (
echo java exists
) ELSE (
echo java does not exists
)
精彩评论