我正在尝试从下面给出的 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)
同样我写了这个批处理脚本
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
)
%%g
显示“1.6.0_21”
有人可以指导我正确的方向吗?我不太熟悉 for/f
。
最佳答案
@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
在第一个 for
循环中,"tokens=3"
表示我们将只使用命令输出中的第三个标记。我们可以在 for
循环本身内运行此命令,而不是将 java -version
命令的输出重定向到文件。插入符 (^
) 是转义字符,我们需要它才能嵌入 >
、&
和 |
命令字符串中的符号。
在 for
循环体中,我们设置了一个新的变量,JAVAVER
,以便我们稍后可以对版本字符串进行一些操作。
set JAVAVER=%JAVAVER:"=%
命令删除了版本字符串周围的双引号。
最后一个 for
循环解析 java 版本字符串。 delims=.
表示我们将使用句点分隔标记。 tokens=1-3
表示我们要将前三个标记从字符串传递到循环体。我们现在可以使用显式变量 %%v
和隐式变量(字母表中的下一个字母)%%w
和 获取 java 版本字符串的组件>%%x
.
当我在我的系统上运行它时,我得到:
Output: "1.6.0_24"
Output: 1.6.0_24
Major: 1
Minor: 6
Build: 0_24
关于java - 如何从批处理脚本中获取 Java 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5675459/