简体   繁体   English

识别是否无法在Windows批处理脚本中执行Java

[英]identify if java cannot be executed in windows batch script

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. 我写了下面的批处理脚本,如果环境中不存在JAVA_HOME路径,它会询问它,然后验证Java版本。 but before identifying java version it should also check whether java is present in the path (can be executed) or not. 但是在标识Java版本之前,还应该检查路径中是否存在java (可以执行)。 Please help me figure out if java -version can be executed or not and display proper message 请帮我弄清楚是否可以执行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 of the examples of invalid condition would be, instead of providing JAVA_HOME ie, e:\\csm\\java I gave it as e:\\csm\\java\\jre\\bin which in this case should display proper error message that please provide a JAVA_HOME path 无效条件的示例之一将是,而不是提供JAVA_HOME即e:\\ csm \\ java,我将其指定为e:\\ csm \\ java \\ jre \\ bin,在这种情况下应显示正确的错误消息, please provide a JAVA_HOME路径

To check the existence of a program in the PATH , windows batch provides the ~%PATH: option of the SET command. 要检查PATH是否存在程序,Windows批处理提供了SET命令的~%PATH:选项。 See HELP CALL or HELP FOR . 请参阅HELP CALLHELP 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. 在此示例中,如果java.exePATH ,它将回显其完整的文件规范。

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
)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM