At my work, I need to use multiple versions of Java, depending on which project I work on. I've made a batch script to take care of this. There are several different actions that you can perform with the script.

You can change the current value of your JAVA_HOME from a version in your file. You can add new Java installation (pre-installed one), you can remove them and you can list them. You can echo your env variable, if you're not sure what's the value at the moment.

This is a script I'm using for myself for the time being, so there are a lot of things that are probably not robust or are not yet implemented. For example, you can use the program with non-existent version and it will not crash or warn you. The add and remove functions work but they output the command and can surely be played with. It does work when you know what to do.

This is the first time I'm writing a batch script, and I must say it is mostly been googling and hacking something together.

if "%1"=="" goto empty
if "%1"=="echo" goto output
if "%1"=="e" goto output
if "%1"=="list" goto list
if "%1"=="l" goto list
if "%1"=="add" goto add
if "%1"=="a" goto add
if "%1"=="remove" goto remove
if "%1"=="r" goto remove

rem To escape '%' the sequence is '%%', so to not have to have an arg like %JAVA6%, the following will add % % on both end of the argument
SET java_version=%%%1%%

for /f "delims== tokens=1,2" %%a in (%~dp0java_versions.store) do (
   set "%%~a=%%b"
call :unquote JAVA_HOME %java_version%

for /f "delims== tokens=1,2" %%a in (%~dp0java_versions.store) do (
  set "%%a="

goto :EOF

  set %1=%~2
  goto :output

  SET "java_version="
  goto :EOF

  FOR /f "delims=" %%x IN (%~dp0java_versions.store) DO (
    echo "%%~x"
  goto :EOF

  if "%2"=="" (
    ECHO "Name of the entry missing"
    goto :EOF
  if "%~3"=="" (
    ECHO "Path of the entry missing"
    goto :EOF
  echo %~3
  IF EXIST %~3 (
    echo %2="%~3">> %~dp0java_versions.store
    ECHO %2="%~3" added
  ) ELSE (
    ECHO %3 is not an actual folder
  ) .
  goto :EOF

  if "%2"=="" (
    ECHO "Name of the entry missing as an argument of the batch"
    goto :EOF
  set "found="
  for /f "delims== tokens=1,2" %%a in (%~dp0java_versions.store) do (
     if "%2"=="%%a" (
       set found=1
       echo found
  if defined found  (
    for /f "delims== tokens=1,2" %%a in (%~dp0java_versions.store) do (
      if NOT "%2"=="%%a" (
        echo %%~a=%%b>> %~dp0new_java_versions.store
    xcopy %~dp0new_java_versions.store %~dp0java_versions.store /y
    del %~dp0new_java_versions.store /f /q
    ECHO Entry %2 deleted

  goto :EOF

  ECHO "Empty argument, please provide an argument"
  goto :EOF

Store file format :

JAVA8_11="C:\Program Files\Java\jdk1.8.0_11"
JAVA8="C:\Program Files\Java\jdk1.8.0_73"
JAVA7="C:\Program Files\Java\jdk1.7.0_51"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.