2017-07-25 36 views
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 

在此先感謝。

+2

你對「系統文件夾」有什麼意思? Oracle Java未預裝Windows。它必須由用戶通過下載安裝程序並執行它來單獨安裝。在我的電腦上都沒有安裝Java,因爲我不需要它,無論是腳本任務還是網頁瀏覽。所以你的問題對我來說還不清楚。請編輯它並使其更加清晰。您希望知道每個用戶都有可能在安裝過​​程中安裝Java而不是默認位置。並且向我們展示你已經擁有的代碼,因爲Stack Overflow不是免費的代碼寫入服務。 – Mofi

+0

@Mofi,通過引用不安裝它意味着我不需要設置JAVA_HOME並且在環境變量中不可用。我只需要從版本8的安裝路徑中檢查java.exe的位置。 – DeeJay007

+0

您的'SYSTEM'文件夾中沒有安裝'JAVA',但'JAVA'或'JRE'文件夾存在。你是這個意思嗎?如果是的話,這個'SYSTEM'文件夾裏面有許多'JAVA'文件夾,你想檢查更高版本的'JAVA'。對? –

回答

0

是的,你可以通過閱讀目前每個JAVA文件夾的JRE文件夾中的文件releaseSYSTEMS內這樣做。 它駐留在目錄C:\Program Files\Java\jre7\所以你的情況可能有點像這樣...\SYSTEMS\Java\jre。您的腳本應該能夠從您的每個JAVAJRE文件夾中讀取此文件,然後嘗試查找最大的值。

相關問題