Created
January 19, 2021 14:26
-
-
Save projected1/6bd04ce8beb6689b68860f171383a039 to your computer and use it in GitHub Desktop.
Switches between installed Java versions.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@echo off | |
setlocal | |
rem Must run elevated | |
net session > nul 2>&1 | |
if not %errorLevel% == 0 ( | |
echo Error: Please re-run as admin | |
goto end | |
) | |
set JAVA_PATH=C:\Program Files\Java | |
set JAVAPATH=C:\ProgramData\Oracle\Java | |
set JAVAPATH_LINK="%JAVAPATH%\javapath" | |
set JAVAPATH_TARGET="%JAVAPATH%\javapath_target" | |
set COMMON_JAVAPATH=C:\Program Files (x86)\Common Files\Oracle\Java | |
set COMMON_JAVAPATH_LINK="%COMMON_JAVAPATH%\javapath" | |
set COMMON_JAVAPATH_TARGET="%COMMON_JAVAPATH%\javapath_target" | |
rem List Java versions | |
echo Available Java versions: | |
dir /b "%JAVA_PATH%\jdk*" | |
rem Ask user to select one | |
:retry | |
set /p JAVA_VERSION="Select Java version: " | |
if not exist "%JAVA_PATH%\%JAVA_VERSION%" ( | |
echo Error: Invalid Java version | |
goto retry | |
) | |
rem Set the global JAVA_HOME variable | |
setx JAVA_HOME "%JAVA_PATH%\%JAVA_VERSION%" > nul | |
rem WARNING: "setx" is limited by the maximum environment buffer size, which is to 1024 characters. | |
rem If your path variable value is longer than that, "setx" will TRUNCATE YOUR PATH! | |
rem Either increase the maximum environment buffer size, or add the %JAVA_HOME%\bin | |
rem to path manually (recommended). | |
rem See https://superuser.com/a/387625 | |
rem setx PATH "%PATH%;%%JAVA_HOME%%\bin" | |
rem Update Windows registry keys (until Java 8) | |
for /f "tokens=1,2,3 delims=.-" %%a in ("%JAVA_VERSION:~3%") do ( | |
set JAVA_MAJOR_MINOR_VERSION=%%a.%%b | |
) | |
rem WARNING: "reg" hangs sporadically (seems like a bug). Kill it manually if necessary, | |
rem and try again running the version switch. | |
reg add "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment" /v CurrentVersion -t REG_SZ /d %JAVA_MAJOR_MINOR_VERSION% /f | |
rem Setup the selected version as the default (until Java 10) | |
for /f "usebackq tokens=*" %%f in (`dir /b /a:d /s "%JAVAPATH_TARGET%*"`) do ( | |
rmdir /q /s "%%f" | |
) | |
mkdir %JAVAPATH_TARGET% | |
copy "%JAVA_PATH%\%JAVA_VERSION%\bin\java.exe" %JAVAPATH_TARGET% > nul | |
copy "%JAVA_PATH%\%JAVA_VERSION%\bin\javaw.exe" %JAVAPATH_TARGET% > nul | |
copy "%JAVA_PATH%\%JAVA_VERSION%\bin\javaws.exe" %JAVAPATH_TARGET% > nul | |
if exist %JAVAPATH_LINK% ( | |
rm %JAVAPATH_LINK% | |
) | |
mklink /j %JAVAPATH_LINK% %JAVAPATH_TARGET% > nul | |
rem Setup the selected version as the default (since Java 10) | |
for /f "usebackq tokens=*" %%f in (`dir /b /a:d /s %COMMON_JAVAPATH_TARGET%*`) do ( | |
rmdir /q /s "%%f" | |
) | |
mkdir %COMMON_JAVAPATH_TARGET% | |
copy "%JAVA_PATH%\%JAVA_VERSION%\bin\java.exe" %COMMON_JAVAPATH_TARGET% > nul | |
copy "%JAVA_PATH%\%JAVA_VERSION%\bin\javaw.exe" %COMMON_JAVAPATH_TARGET% > nul | |
copy "%JAVA_PATH%\%JAVA_VERSION%\bin\javaws.exe" %COMMON_JAVAPATH_TARGET% > nul | |
if exist %COMMON_JAVAPATH_LINK% ( | |
rm %COMMON_JAVAPATH_LINK% | |
) | |
mklink /j %COMMON_JAVAPATH_LINK% %COMMON_JAVAPATH_TARGET% > nul | |
rem Add java.dll (java\bin) and jvm.cfg (java\lib) (since Java 11) | |
if exist "%JAVAPATH%\bin" ( | |
rm "%JAVAPATH%\bin" | |
) | |
if exist "%JAVAPATH%\lib" ( | |
rm "%JAVAPATH%\lib" | |
) | |
mklink /j "%JAVAPATH%\bin" "%JAVA_PATH%\%JAVA_VERSION%\bin" > nul | |
mklink /j "%JAVAPATH%\lib" "%JAVA_PATH%\%JAVA_VERSION%\lib" > nul | |
if exist "%COMMON_JAVAPATH%\bin" ( | |
rm "%COMMON_JAVAPATH%\bin" | |
) | |
if exist "%COMMON_JAVAPATH%\lib" ( | |
rm "%COMMON_JAVAPATH%\lib" | |
) | |
mklink /j "%COMMON_JAVAPATH%\bin" "%JAVA_PATH%\%JAVA_VERSION%\bin" > nul | |
mklink /j "%COMMON_JAVAPATH%\lib" "%JAVA_PATH%\%JAVA_VERSION%\lib" > nul | |
rem Verify | |
java -version | |
:end | |
endlocal |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment