Setting environment variables and appending to system-wide %PATH% with a Windows batch file

18,585

Part of your problem is that SETX isn’t SET –– after you do

setx JAVA_HOME "C:\Program Files (x86)\Java\jdk1.7.0_21" /m

…, %JAVA_HOME% isn’t set in that instance of the Command Prompt.  You’d have to start a new instance to get %JAVA_HOME%, et. al., set.  I suggest you do something like

set  JAVA_HOME=C:\Program Files (x86)\Java\jdk1.7.0_21
setx JAVA_HOME "%JAVA_HOME%" /m

I don’t see why you would be deleting part of the original path.  Access/modify the User path variable, not System path may be relevant.  And you might want to do

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path

to get the system part of the PATH variable, excluding the user part.

Share:
18,585

Related videos on Youtube

user2596774
Author by

user2596774

Updated on September 18, 2022

Comments

  • user2596774
    user2596774 over 1 year

    I'm trying to set three environment variables and append them to the machine path. Right now my code is like this:

    setx CATALINA_HOME "C:\Program Files (x86)\Apache Software Foundation\Tomcat 7" /m
    setx JRE_HOME "C:\Program Files (x86)\Java\jre7" /m
    setx JAVA_HOME "C:\Program Files (x86)\Java\jdk1.7.0_21" /m
    setx PATH "%PATH%;%JAVA_HOME%\bin;%JRE_HOME%\bin;%CATALINA_HOME%\BIN;" /m
    

    The first three when run alone work fine for adding the variable. However, the last line is resulting in the deletion of part of the original path and none of the additional variables appended.

    My desired result would be the addition of the three variables and for the system-wide path to be

    [original path];%JAVA_HOME%\bin;%JRE_HOME%\bin;%CATALINA_HOME%\BIN;
    
  • barlop
    barlop about 9 years
    HKCU\Environment for user vars. and HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment for system.vars. PATH combines/concatenates them
  • Scott - Слава Україні
    Scott - Слава Україні about 9 years
    @barlop: I don't understand what you are saying.
  • barlop
    barlop about 9 years
    i'm not contradicting what you are saying. And i'm saying that if you type PATH<ENTER> you'll see it first lists the system path, then the user path. i.e. the contents of the PATH variable is made up of both the registry entry for the system/machine path, and the registry entry for the user path. For example, the first entry of %PATH% is the first in the system path, and the last entry is the last in the user path. because if concatenates(joins) the values from the two entries, first the system path then the user path after it.
  • Scott - Слава Україні
    Scott - Слава Україні about 9 years
    OK;  I was assuming that the OP already knew that, from the fact that the question mentions "system-wide %PATH%", "the machine path", and "the system-wide path", and he was already using the /m option to setx.
  • barlop
    barlop about 9 years
    He didn't know the registry entry for it that's why you mentioned it. And my point is that if you're going to educate somebody about where that is it's worth, for reference, also mentioning where the user path entry is. Then he can really understand how something can be in one and not the other. In fact no doubt you'd have had to look up the system path registry entry (as it's rather long), and most information sources that list it are helpful enough to list the user one too. And having both there is useful for anybody for reference or if they don't know then to help them understand.