如何在Windows命令提示符下使用单个命令获取java版本?
我需要从下面的如何在Windows命令提示符下使用单个命令获取java版本?,java,regex,windows,command,Java,Regex,Windows,Command,我需要从下面的java-version输出中获取java版本1.6.0_26 java version "1.6.0_26" Java(TM) SE Runtime Environment (build 1.6.0_26-b03) Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing) 请帮助我获取1.6.0\u 26 String regexMatch(String myInput, String myRegex) {
java-version
输出中获取java版本1.6.0_26
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)
请帮助我获取1.6.0\u 26
String regexMatch(String myInput, String myRegex)
{
String ResultString
Pattern regex
Matcher regexMatcher
regex = Pattern.compile(myRegex, Pattern.DOTALL);
regexMatcher = regex.matcher(myInput);
List<String> matchList = new ArrayList<String>();
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}
for(int i=0;i<matchList.size();i++)
{
myInput=myInput.replaceAll( matchList[i], '')
}
return myInput;
}
注意:我不需要power shell或任何外部程序
更新
我提出了java-version2>&1 | findstr/I“version”
,它给出了下面的输出
java version "1.6.0_22"
现在,即使是模式匹配的java方式(或正则表达式)也适用于我:)您可以尝试:
java -version 2>&1 | awk '/version/ {print $3}' | egrep -o '[^\"]*'
我编写了下面的函数来获取java版本
1.6.0\u26
String regexMatch(String myInput, String myRegex)
{
String ResultString
Pattern regex
Matcher regexMatcher
regex = Pattern.compile(myRegex, Pattern.DOTALL);
regexMatcher = regex.matcher(myInput);
List<String> matchList = new ArrayList<String>();
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}
for(int i=0;i<matchList.size();i++)
{
myInput=myInput.replaceAll( matchList[i], '')
}
return myInput;
}
其中
rs=“java version\”1.6.0\u 26\”
您可以通过一行链接到的问题运行解决方案:
c:\>for /f "tokens=3" %g in ('java -version 2^>^&1 ^| findstr /i "version"') do @echo %g
"1.6.0_24"
c:\>for /f "tokens=3" %g in ('java -version 2^>^&1 ^| findstr /i "version"') do ( @set v=%g & @echo %v:~1,8% )
1.6.0_24
c:\>对于/f“tokens=3”%g in('java-version 2^>^&1^^ findstr/i“version”)do@echo%g
"1.6.0_24"
c:\>for/f“tokens=3”%g in('java-version 2^>^&1^^ findstr/i“version”')do(@set v=%g&@echo%v:~1,8%)
1.6.0_24
我刚刚检查了一下,我的第二个示例似乎只适用于Windows7,下面的示例适用于我在WindowsXP上的操作(因此它应该也适用于Windows7)
对于/f“tokens=3”%g in('java-version 2^>^&1^|findstr/i“version”)do(@echo%~g)
这将把java版本存储到jver
变量中,并作为整数存储
你可以用它来做比较
if %jver% LSS 16000 echo not supported version
。您可以通过删除%k、%l和%m来使用更主要的版本。此命令提示版本
对于.bat,请使用以下命令:
根据我的测试,这是从bat获取java版本的最快方法(因为它只使用内部命令,而不使用外部命令,如
FIND
,FINDSTR
,并且不使用GOTO
,这也会减慢脚本的速度)。一些JDK供应商不支持-fullversion
开关,或者它们的实现与Oracle提供的不同(最好避免它们) 您可以从命令promt的单行中执行此操作
C:>java-version基于@a_horse_,没有名称,但首先检测是否存在命令
where java > nul
if %ERRORLEVEL% neq 0 (
set java_v="Command not found"
) else (
for /f "tokens=3" %%g in ('java -version 2^>^&1 ^| findstr /i "version"') do set java_v=%%g
)
echo Java: %java_v:~1,8%
描述你的最终目标?也许有更好的办法。这和@Pangea的问题不一样吗:链接使用批处理文件获取javaversion,我需要一些东西,通过它我可以直接使用一行程序获取javaversion
1.6.0\u 26
,既然我无法在客户机器中部署批处理文件,为什么不在代码中调用该属性,直接使用该属性或将其写入文件中的新空行?否则,我真的看不出Java(作为一种编程语言)与此有什么关系。Bollocs,我没有注意到,早些时候你可能想删除你的答案,因为人们可能会倒下,这个答案对于a是完全有效的。我知道这问得太多了,但仍然“
无法删除?请参阅我的编辑。”。然而,这假设了一定长度的响应,这可能并不总是有效的。嗯,对我来说是有效的。您是否启用了“命令扩展名”?它们是默认的,这就是启用%v:~1,8%
syntaxI的原因。我不知道你刚才说的是什么:P你说的“命令扩展”是什么意思?我还需要处理任何出现的问题default@AbhishekSimon:查看我的编辑。第一种语法似乎只适用于Windows7
if %jver% LSS 16000 echo not supported version
@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"
where java > nul
if %ERRORLEVEL% neq 0 (
set java_v="Command not found"
) else (
for /f "tokens=3" %%g in ('java -version 2^>^&1 ^| findstr /i "version"') do set java_v=%%g
)
echo Java: %java_v:~1,8%