[英]identify if java cannot be executed in windows batch script
我寫了下面的批處理腳本,如果環境中不存在JAVA_HOME
路徑,它會詢問它,然后驗證Java版本。 但是在標識Java版本之前,還應該檢查路徑中是否存在java
(可以執行)。 請幫我弄清楚是否可以執行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
無效條件的示例之一將是,而不是提供JAVA_HOME
即e:\\ csm \\ java,我將其指定為e:\\ csm \\ java \\ jre \\ bin,在這種情況下應顯示正確的錯誤消息, please provide a JAVA_HOME
路徑
要檢查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
,它將回顯其完整的文件規范。
我使用下面的代碼片段,它解決了我的問題
: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.