
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.
단, PC를 다시 시작하면 감지됩니다.
질문: PC를 다시 시작하지 않고 설치된 Java(모든 버전)의 존재를 감지하려면 cmd에서 어떤 명령을 사용해야 합니까?
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
C 드라이브에는 Java가 설치되어 있다고 가정합니다. 그렇지 않으면 명령에서 드라이브 문자를 변경할 수 있습니다.
각 드라이브를 반복하고 결과가 발견되면 바로 중지하려면 다음 powershell 명령을 사용할 수 있습니다.
$(Get-PSDrive -PSProvider 'FileSystem' |%{ gci -Recurse $_.Root |?{$_.Name -eq "Java.exe"} | Select -First 1}).FullName