我看到很多类似的问题,但没有得到我需要的帮助。
我的要求是从系统文件夹中找到Java版本8并调用jar文件而不安装Java 8.无需设置JAVA_HOME
并且系统文件夹中有多个版本的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
先谢谢。
答案 0 :(得分:0)
是的,您可以通过阅读release
文件夹中每个JRE
文件夹的JAVA
文件夹中的SYSTEMS
文件来执行此操作。
它位于目录C:\Program Files\Java\jre7\
中,因此在您的情况下,它可能有点像...\SYSTEMS\Java\jre
。您的脚本应该能够从您的每个JAVA
或JRE
文件夹中读取此文件,然后尝试找到最大值。