2011-09-26 56 views
0

我寫了下面的批處理腳本,要求JAVA_HOME路徑(如果它在環境中不存在),然後驗證java版本。但在識別java版本之前,還應該檢查路徑中是否存在java(可以執行)。請幫助或我找出如果java -version可以執行不能和顯示正確的消息確定如果java不能在widows批處理腳本中執行

@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即E:\ CSM \ java中我把它作爲電子郵件:\ CSM \ java的\ JRE \ BIN在這種情況下應該顯示please provide a JAVA_HOME路徑

回答

1

要檢查程序中存在正確的錯誤消息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.exe是在PATH,呼應其完整的文件規範。

0

我用下面的代碼片段,它解決了我的問題

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