Set Java Path in Windows

I’ve created a small executable that takes the work out of setting the java environment variable that some people struggle with. It was created using bat2exe and makes life simple if you just want Java to work from the command line.

It has been tested and works in XP and Wndows 7 (32 and 64 bit)…should also work in Windows 2000 and Vista without issues.

NOTE: In Windows 7 & Vista you need to run as Administrator.

You can grab my executable here.

See the source batch file below:

@echo off

if exist "C:\Users\Default\ntuser.dat" set OS_ENVIRON="win7"
if exist "C:\Documents and Settings\Default User\ntuser.dat" set OS_ENVIRON="winxp"
IF NOT DEFINED OS_ENVIRON goto ERR

setlocal ENABLEEXTENSIONS
set VALUE_NAME=CurrentVersion
 if exist "C:\Program Files (x86)" goto AMD64
 if exist "C:\Program Files" goto x86
 goto ERR

 :AMD64
	set ARCH_TYPE="AMD64"
	set KEY_NAME="HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment"
 goto exec
 :x86
	set ARCH_TYPE="x86"
	set KEY_NAME="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment"
 GOTO exec	
 :exec

::
:: get the current version
::
if %OS_ENVIRON%=="winxp" set SKIP_TOKENS="usebackq skip=4 tokens=3"
if %OS_ENVIRON%=="win7" set SKIP_TOKENS="usebackq skip=2 tokens=3"

FOR /F %SKIP_TOKENS% %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
    set ValueValue=%%A
)

if defined ValueValue (

    @echo the current Java runtime is  %ValueValue%
) else (
    @echo Java not found...please install and try again!
    goto end
)

set JAVA_CURRENT="%KEY_NAME:~1,-1%\%ValueValue%"
set JAVA_HOME=JavaHome

::
:: get the javahome
::
if %ARCH_TYPE%=="AMD64" goto 64Bit
if %ARCH_TYPE%=="x86" goto 32Bit
goto ERR

:64Bit
FOR /F "usebackq skip=2 tokens=3-5" %%A IN (`REG QUERY %JAVA_CURRENT% /v %JAVA_HOME% 2^>nul`) DO (
    set JAVA_PATH=%%A %%B %%C
)
goto path

:32Bit
if %OS_ENVIRON%=="winxp" set SKIP_TOKENS="usebackq skip=4 tokens=3,4"
if %OS_ENVIRON%=="win7" set SKIP_TOKENS="usebackq skip=2 tokens=3,4"
FOR /F %SKIP_TOKENS% %%A IN (`REG QUERY %JAVA_CURRENT% /v %JAVA_HOME% 2^>nul`) DO (
    set JAVA_PATH=%%A %%B
)
goto path

:path
if not exist "%JAVA_PATH%" goto PATH_ERR
echo The path of the current Java JVM according to the registry is 
echo %JAVA_PATH%
echo.
echo Now if we try it:
"%JAVA_PATH%\bin\java.exe" -version
echo.
echo Press CTRL-C to abort or any key to add "%JAVA_PATH%" to the current path
pause
echo adding "%JAVA_PATH%" to the current path
echo adding "%JAVA_PATH%\bin" to the current path
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d "%PATH%;%JAVA_PATH%;%JAVA_PATH%\bin" /f

echo.
echo Please reboot for the changes to take effect...
pause

 :END
goto exit

 :PATH_ERR
 echo Could not resolve Java path!
 pause
 goto exit

 :ERR
 echo Unsupported architecture!
 pause

:exit

Leave a Comment