当我安装 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(任何版本),而无需重新启动 PC?
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 进程的搜索路径中。
- 使用 req 查询查找 JAVA HOME
- 拆分 REG_SZ 请求查询
- 修剪结果
- 添加到进程搜索路径
- 根据需要使用 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