
當我安裝 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