Получить конкретную версию Java с PowerShell - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть некоторые проблемы с выводом версии 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 голосов
/ 04 декабря 2018

Используйте регулярное выражение для сопоставления и извлечения номера версии:

$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
0 голосов
/ 04 декабря 2018

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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...