
Когда я устанавливаю 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.
- Найдите JAVA HOME с помощью запроса req
- Разделить запрос REG_SZ req
- Обрежьте результат
- Добавить в путь поиска процесса
- Используйте 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