1
我看到很多類似的問題,但沒有得到我需要的幫助。 我的要求是從系統文件夾中找到Java版本8,並在不安裝Java 8的情況下調用jar文件。無需設置JAVA_HOME
,系統文件夾中有多個可用的Java版本。批處理文件可以在不安裝的情況下設置java版本
我只需要根據我的需求檢查Java的主要版本。
我寫的東西像
@echo off
call "%~dp0..\bin\java.exe"
d:
cd JARFOLDER
java -jar test.jar
但我不知道要檢查的Java的主要版本。
更新: 我使用了@Mofi給出的解決方案,用於我的需求如下,它工作正常。
@echo off
rem Get path of latest installed Java directly from Windows registry.
for /F "skip=1 tokens=1,2*" %%N in ('%SystemRoot%\System32\reg.exe QUERY "HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\javaws.exe" /v Path 2^>nul') do if /I "%%N" == "Path" set "JAVA_8_HOME=%%P" & goto JavaPathFound
rem Path of Java not found in registry, search for 32-bit Java in the default
rem program files folders of 64-bit and 32-bit Windows and take first found.
if "%ProgramFiles(x86)%" == "" goto Windows_x86
for /R "%ProgramFiles(x86)%" %%I in (java*.exe) do set "JAVA_8_HOME=%%~dpI" & goto JavaPathFound
:Windows_x86
for /R "%ProgramFiles%" %%I in (java*.exe) do set "JAVA_8_HOME=%%~dpI" & goto JavaPathFound
echo Error: Java binary directory not found.
echo/
pause
goto :EOF
:JavaPathFound
if not "%JAVA_8_HOME:~-1%" == "\" set "JAVA_8_HOME=%JAVA_8_HOME%\"
set "JAVA_8_HOME=%JAVA_8_HOME%java.exe"
for /F "tokens=1-3" %%A in ('"%JAVA_8_HOME%" -version 2^>^&1') do (
if /I "%%A %%B" == "java version" (
set "JavaVersion=%%~C"
goto EvaluateVersion
)
)
echo Error: Failed to determine version of installed Java.
goto :EOF
:EvaluateVersion
echo Java version is: %JavaVersion%
for /F "tokens=2 delims=." %%I in ("%JavaVersion%") do set "jver=%%I"
echo Main version is: %jver%
echo Path is: %JAVA_8_HOME%
if %jver%==8 (
echo "The processor will be started with Java 8"
cd /D D:\JARFOLDER
"%JAVA_8_HOME%" -jar test.jar
)
endlocal
在此先感謝。
你對「系統文件夾」有什麼意思? Oracle Java未預裝Windows。它必須由用戶通過下載安裝程序並執行它來單獨安裝。在我的電腦上都沒有安裝Java,因爲我不需要它,無論是腳本任務還是網頁瀏覽。所以你的問題對我來說還不清楚。請編輯它並使其更加清晰。您希望知道每個用戶都有可能在安裝過程中安裝Java而不是默認位置。並且向我們展示你已經擁有的代碼,因爲Stack Overflow不是免費的代碼寫入服務。 – Mofi
@Mofi,通過引用不安裝它意味着我不需要設置JAVA_HOME並且在環境變量中不可用。我只需要從版本8的安裝路徑中檢查java.exe的位置。 – DeeJay007
您的'SYSTEM'文件夾中沒有安裝'JAVA',但'JAVA'或'JRE'文件夾存在。你是這個意思嗎?如果是的話,這個'SYSTEM'文件夾裏面有許多'JAVA'文件夾,你想檢查更高版本的'JAVA'。對? –