Как обнаружить Java с помощью cmd после его установки, не перезапуская ПК в Windows 10

Как обнаружить Java с помощью cmd после его установки, не перезапуская ПК в Windows 10

Когда я устанавливаю Java, в конце установки она не обнаруживается в моей системе:

C:\Windows\system32>where java
INFO: No file could be found for the given patterns.

и

C:\Windows\system32>java -version
"java" is not recognized as an internal or external command,
executable program or batch file.

введите описание изображения здесь

Только когда я перезагружаю ПК, он его обнаруживает.

введите описание изображения здесь

Вопрос: какую команду следует использовать в cmd, чтобы определить наличие установленной Java (любой версии), не перезапуская ПК?

PD: протестировано на windows 10 pro x64 21h2

Обновлять:

Я изменилРешение Carsten.R:

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /s /f *jre* >nul 2>&1 & IF %errorlevel% == 0 (echo OK) else (echo FAIL)

решение1

Привет, смотрите мой пакетный файл ниже. Это работает до перезагрузки, он извлекает путь установки из реестра и добавляет его в путь поиска текущего процесса cmd.

  1. Найдите JAVA HOME с помощью запроса req
  2. Разделить запрос REG_SZ req
  3. Обрежьте результат
  4. Добавить в путь поиска процесса
  5. Используйте WHERE или JAVA по вашему усмотрению.
@echo off
SETLOCAL
for /f "tokens=*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment" /V JAVA_HOME  ^|findstr /ri "REG_SZ"') do SET RESULT=%%~a
SET "RESULT=%RESULT:* REG_SZ =%"
for /f "tokens=* delims= " %%a in ("%RESULT%") do set TRIMRESULT=%%a
echo ---%TRIMRESULT%---
SET PATH=%PATH%;%TRIMRESULT%

where java
pause
REM ALTERNATIVE REG KEY
REM reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /S /f *jdk-*

Кстати, более новая версия OpenJDK 17https://docs.microsoft.com/en-us/java/openjdk/download, работает именно так, как вам хотелось бы. Не нужно никаких излишеств.

Если вы хотите проверить, установлено ли что-то в Windows, запрос ключей реестра удаления — правильный путь. Это может быть полезно и для других приложений.

Пример сделан с использованием пакета Microsoft, ключи реестра могут различаться в зависимости от записи, но я уверен, что вы сможете легко его адаптировать.

Вот пример для jre-8u341-windows-x64.exe

@echo off
SETLOCAL
for /f "tokens=*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /s /f *jre*  ^|findstr /ri "REG_SZ"') do SET RESULT=%%~a
echo 1 ---%RESULT%---
pause
SET "RESULT=%RESULT:* REG_SZ =%"
echo 2 ---%RESULT%---
pause
for /f "tokens=* delims= " %%a in ("%RESULT%") do set TRIMRESULT=%%a
echo 3 ---%TRIMRESULT%---
pause
SET PATH=%PATH%;%TRIMRESULT%

where java

pause

решение2

Для поиска файла «java.exe» можно использовать следующую командную строку:

cd C:\ & dir /s /b java.exe

Предполагается, что Java установлена ​​на диске C. В противном случае вы можете изменить букву диска в команде.

Если вы хотите выполнить итерацию по каждому диску и сразу же остановиться после нахождения результата, вы можете использовать следующую команду PowerShell:

$(Get-PSDrive -PSProvider 'FileSystem' |%{ gci -Recurse $_.Root |?{$_.Name -eq "Java.exe"} | Select -First 1}).FullName

Связанный контент