
Cuando instalo Java, al finalizar la instalación, no lo detecta en mi sistema:
C:\Windows\system32>where java
INFO: No file could be found for the given patterns.
y
C:\Windows\system32>java -version
"java" is not recognized as an internal or external command,
executable program or batch file.
Sólo que cuando reinicio la PC, entonces sí lo detecta.
Pregunta: ¿qué comando debo usar cmd para detectar la presencia de java instalado (cualquier versión), sin reiniciar la PC?
PD: probado en Windows 10 pro x64 21h2
Actualizar:
he modificadoLa solución de 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)
Respuesta1
Hola, mira mi archivo por lotes a continuación. Eso funciona antes de reiniciar, extrae la ruta de instalación del registro y la agrega a la ruta de búsqueda del proceso cmd actual.
- Encuentre JAVA HOME con consulta requerida
- Consulta de solicitud dividida REG_SZ
- Recortar el resultado
- Agregar a la ruta de búsqueda de procesos
- Usa WHERE o JAVA como quieras
@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-*
Por cierto, el nuevo OpenJDK 17https://docs.microsoft.com/en-us/java/openjdk/download, funciona exactamente como le gustaría. No hay necesidad de cosas sofisticadas.
Si desea probar si algo está instalado en Windows, consultar las claves de registro de desinstalación es la forma correcta. También puede resultar útil para otras aplicaciones.
El ejemplo está hecho con las claves de registro del paquete de Microsoft que pueden variar según las entradas, pero estoy seguro de que puede adoptarlas fácilmente.
Aquí un ejemplo para 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
Respuesta2
Puede utilizar la siguiente línea de comando para encontrar el archivo "java.exe"
cd C:\ & dir /s /b java.exe
Se supone que Java está instalado en la unidad C. De lo contrario, puede cambiar la letra de la unidad en el comando.
Si desea iterar sobre cada unidad y detenerse directamente una vez que se encuentre un resultado, puede usar este comando de PowerShell:
$(Get-PSDrive -PSProvider 'FileSystem' |%{ gci -Recurse $_.Root |?{$_.Name -eq "Java.exe"} | Select -First 1}).FullName