如何从批处理脚本获取Java版本?

abi*_*964 10 java batch-file

我试图从下面给出的java版本输出中获得'6'

java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b07)
Java HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)

为此我写了这个批处理脚本

set VERSION6="1.6.0_21"
java -version 2>&1 | findstr "version" >ab.txt
for /f "tokens=3" %%g in (ab.txt) do (
  if not %%g == %VERSION6% echo %%g
  echo %%g
)
Run Code Online (Sandbox Code Playgroud)

%%g 显示"1.6.0_21"

有人可以指导我改正方向吗?我不太熟悉for /f.

Pat*_*uff 12

@echo off
setlocal

set VERSION6="1.6.0_21"
for /f "tokens=3" %%g in ('java -version 2^>^&1 ^| findstr /i "version"') do (
    @echo Output: %%g
    set JAVAVER=%%g
)
set JAVAVER=%JAVAVER:"=%
@echo Output: %JAVAVER%

for /f "delims=. tokens=1-3" %%v in ("%JAVAVER%") do (
    @echo Major: %%v
    @echo Minor: %%w
    @echo Build: %%x
)

endlocal
Run Code Online (Sandbox Code Playgroud)

在第一个for循环中,"tokens=3"表示我们将仅使用命令输出中的第三个标记.java -version我们可以在for循环本身内运行此命令,而不是将命令的输出重定向到文件.插入记号(^)是转义字符,并且需要,所以我们可以嵌入>,&|在命令字符串符号.

for循环体内,我们设置了一个新的var JAVAVER,以便稍后我们可以对版本字符串进行一些操作.

set JAVAVER=%JAVAVER:"=%命令从版本字符串周围删除双引号.

最后一个for循环解析java版本字符串.delims=.我们说要用期限来划分令牌.tokens=1-3说我们要把前三个标记从字符串传递给循环体.我们现在可以使用显式变量%%v和隐含变量(字母表中的下一个字母)%%w%%x.来获取java版本字符串的组件.

当我在我的系统上运行时,我得到:

Output: "1.6.0_24" 
Output: 1.6.0_24
Major: 1 
Minor: 6 
Build: 0_24
Run Code Online (Sandbox Code Playgroud)