使用Powershell获取特定的Java版本

时间:2018-12-04 08:27:48

标签: java powershell

我在将Java版本作为字符串获取时遇到一些问题。 在批处理脚本中,我是这样完成的:

for /f tokens^=2-5^ delims^=.-_^" %%j in ('%EXTRACTPATH%\Java\jdk_extract\bin\java -fullversion 2^>^&1') do set "JAVAVER=%%j.%%k.%%l_%%m"

输出为:1.8.0_121

现在我想为PowerShell执行此操作,但是我的输出是:1.8.0_12,最后我想念一个“ 1”现在我已经尝试了修剪和分割,但是没有任何东西可以给我正确的输出,有人帮帮我? 这就是我对PowerShell的了解

$javaVersion = (& $extractPath\Java\jdk_extract\bin\java.exe -fullversion 2>&1)
$javaVersion = "$javaVersion".Trim("java full version """).TrimEnd("-b13")

完整的输出是:Java完整版本“ 1.8.0_121-b13”

2 个答案:

答案 0 :(得分:1)

TrimEnd()的工作方式与您预期的有所不同:

'1.8.0_191-b12'.TrimEnd('-b12') 

结果:1.8.0_19,也这样:

'1.8.0_191-b12'.TrimEnd('1-b2')

原因是TrimEnd()删除了尾随的一组字符,而不是子字符串。因此.TrimEnd('-b12')的意思是:从字符串末尾删除所有出现的集合'-b12'的字符。并且包括'1'之前的最后'-'

在您的情况下,更好的解决方案是-replace

'java full version "1.8.0_191-b12"' -replace 'java full version "(.+)-b\d+"','$1'

答案 1 :(得分:0)

使用正则表达式匹配和提取版本号:

$javaVersion = if (& java -fullversion 2>&1) -match '\d+\.\d+\.\d+_\d+') {
    $matches[0]
}

$javaVersion = (& java -fullversion 2>&1 | Select-String '\d+\.\d+\.\d+_\d+').Matches[0].Groups[0].Value