6

I need to understand how Global vs User variables works in windows.

Case 1: If the same variable is defined at user and global section what is the behaviour? E.g. I have defined a %PATH% variable either in user and global sections and I see only global value; is there a way to 'append" user PATH to global PATH?

Case 2: The variables defined in user section are not 'resolved' in global section. If I use SET command I see a list of all defined variables (user and global) but 'cross references' are not resolved.

E.g.

in user section I define:

VAR1=test-user 

in global section I define:

VAR2=%VAR1%-more;%VAR3%-more VAR3=test-global 

with SET I see:

... VAR1=test-user VAR2=%VAR1%-more;test-global-more VAR3=test-global ... 

I'm on a Windows 7 x64 box.

So, based on the tests above, my conclusions are:

  • global variables override user variables (if the name is the same only global is valid)
  • no cross reference is admitted between user and global variables

Am I right?

4
  • Can I assume you're writing a batch file? Commented Aug 7, 2012 at 10:11
  • @martineau What I wrote above are my tests. I suppose a behaviour that I added in an update to my question, but I don't know if that's a correct interpretation of my tests. Commented Aug 7, 2012 at 10:15
  • @Dave no, I'm configuring windows manually thorugh 'control panel > system and security > system' and then restarting a CMD session at every change. Commented Aug 7, 2012 at 10:19
  • To answer part of question, I'm pretty sure that user vars can reference system vars. Commented Aug 7, 2012 at 10:23

1 Answer 1

7

Your conclusions aren't quite right, at least according to my testing.

  • User variables can reference system (global) ones.

    System variables cannot reference user variables.

  • User variables will override system (global) ones.

    Just in the default set, TEMP (and TMP) are defined as the user variable as %USERPROFILE%\AppData\Local\Temp and at the same time as the system variable as C:\Windows\TEMP.

    PATH appears to be a special case, where the user variable PATH (if defined) is always appended to the system variable rather than overriding it.

4
  • My tests confirm all but one thing: user's PATH is not appended to global's PATH, but overrided by it. In my configuration they're written in different case: it matters? Commented Aug 7, 2012 at 10:34
  • @AndreaColleoni Case should not matter. If I create a user variable named PATH (or path) with the value C:\test, save (press OK), open a new command prompt and type echo %path%, C:\test appears on the end. Commented Aug 7, 2012 at 10:37
  • I've done as you said. I've also renamed user's PATH to USER_PATH and saw that global's PATH is automatically prepended to USER_PATH. If I leave the two named PATH I see only PATH's global value. Commented Aug 7, 2012 at 10:59
  • @AndreaColleoni USER_PATH has no special meaning for me. Your system may be different from mine for whatever reason... Could someone elase try & confirm it one way or the other? Commented Aug 7, 2012 at 11:06

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.