我对于将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“
发布于 2018-12-04 09:13:09
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'发布于 2018-12-04 09:20:32
使用正则表达式来匹配和提取版本号:
$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].Valuehttps://stackoverflow.com/questions/53608570
复制相似问题