如何获取java版本并希望从批处理文件中获取java版本的'6'。 我试过下面的脚本,但它没有用。
REM check java exists using JAVA_HOME system variable
if "%JAVA_HOME%" == "" (
ECHO Installing java
start /w jdk.exe /s
SETX -m JAVA_HOME "C:\Program Files\Java\jdk1.6.0_31"
ECHO java installed successfully
) ELSE (
ECHO checking java version
goto check_java_version
)
REM check java version using JAVA_HOME system variable
:check_java_version
set PATH=%PATH%;%JAVA_HOME%\bin
for /f tokens^=2-5^ delims^=.-_^" %%j in ('%JAVA_HOME%/bin/java -version 2^>^&1') do set "jver=%%j%%k%%l%%m"
echo %jver%
JAVA_HOME有“C:\ Program Files \ Java \ jdk1.6.0_31”值。
答案 0 :(得分:18)
for /f tokens^=2-5^ delims^=.-_^" %j in ('java -fullversion 2^>^&1') do @set "jver=%j%k%l%m"
这会将java版本存储到 jver
变量中并作为整数存储
你可以用它进行比较.E.G
if %jver% LSS 16000 echo not supported version
。您可以通过删除%k和%l以及%m来使用更多主要版本。此命令提示符版本。
对于.bat,请使用:
@echo off
PATH %PATH%;%JAVA_HOME%\bin\
for /f tokens^=2-5^ delims^=.-_^" %%j in ('java -fullversion 2^>^&1') do set "jver=%%j%%k%%l%%m"
根据我的测试,这是从bat获取java版本的最快方法(因为它只使用内部命令而不是外部命令FIND
,FINDSTR
并且不使用{{1}这也可以减慢脚本)。有些JDK供应商不支持GOTO
交换机,或者它们的实现与Oracle提供的实现不同(更好的避免它们)。
答案 1 :(得分:3)
您可以使用awk
:
>java -fullversion 2>&1|awk "{print $NF}" "1.7.0_21-b11" >java -fullversion 2>&1|awk -F\" "{print $(NF-1)}" 1.7.0_21-b11
脚本示例:
@ECHO OFF &SETLOCAL
FOR /f %%a IN ('java -fullversion 2^>^&1^|awk "{print $NF}"') DO SET "javaversion=%%a"
IF DEFINED javaversion (ECHO java version: %javaversion%) ELSE ECHO java NOT found
输出为:java version: "1.7.0_21-b11"
awk for Windows
答案 2 :(得分:1)
这将是一个白痴,但为什么不打印JAVA_HOME路径?
答案 3 :(得分:0)
如果已经设置了环境路径,它应该是java -version //
或%JAVA_HOME%/ bin / java -version //如果路径尚未设置
答案 4 :(得分:0)
在块语句中,%var%将在输入块之前作为var
的值进行回显。
将echo
移到块外或回显%%g
或call echo %%javaver%%
或调用SETLOCAL enabledelayedexpansion
和echo !javaver!