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

标签 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)

同样我写了这个批处理脚本

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/

相关文章:

batch-file - 批处理文件不运行 'gem install' 之后的下一个命令

java - 尝试连接到 Symantec NetBackup 时 JSch 中出现 "Algorithm negotiation fail"错误 - 远程抓取报告

java - 在 Java、Play Framework 2.2.1 中 Gzip 文件

windows - 文件重命名批处理脚本的启用延迟扩展问题

windows - 使用 Windows 批处理文件从 FTP 服务器仅下载今天的文件

batch-file - 批处理 - 打开文件名包含特定单词的文件

batch-file - "FINDSTR:"在调用函数中使用特殊字符时出错(批处理)

java - 在 Java 中嵌入 XQuery

java - 在eclipse中调试具有多个类的java源文件: Source not found

java - 使用ehcache的Bean无法注入(inject)