确定是否在widows批处理脚本中不能执行java

我写了下面的批处理脚本,如果它没有出现在环境中,它会要求一个JAVA_HOMEpath,然后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_HOMEpath

要检查PATH是否存在程序,windows批量提供了SET命令的~%PATH:选项。 请参阅HELP CALLHELP FOR

使用这段代码作为一个起点。

 :ProgInPath set PROG=%~$PATH:1 goto :eof 

像这样使用它

 call :ProgInPath java.exe IF "%PROG%" == "" ( echo Java.exe not found ) else ( echo. %PROG% ) 

在这个例子中,如果java.exePATH ,它会回应它的完整filespec。

我使用下面的代码片段,它解决了我的问题

 :check_java_existence IF EXIST %JAVA_HOME%\jre\bin\java.exe ( echo java exists ) ELSE ( echo java does not exists )