Explaining the PATH environment variable in Windows
Recently I have seen a large number of posts on forums asking how they run a windows console application that they have downloaded. The problem most of them encounter is that they can only run the application from the command line if they are in the same directory as the application they have just installed.
What is more worrying to me is the replies that people give to these posts suggesting some very silly things
(e.g. moving their application into the
c:\windows\system32\ directory). What a lot of the replies show
is that there are a lot of people who don’t understand the what the PATH environment variable is.
So what is an environment variable then? An envrionment variable is a method of storing variable information
so that processes can look it up. A good way to get an understanding of this is to actually use an environment
variable. Open up a command line and enter
echo %windir%. Notice the output. It is where your windows directory
Now I hear you saying, “I know where my windows directory is, so whats the point.”, but lets look at it from
the point of view of an installer. The installer wants to write a file into your windows directory, if we hard
code the installer to always write it to
c:\windows then the installer will fail when someone has a windows
c:\windowsxp or if they have their windows directory on a different drive (e.g.
But if the installer uses the
windir environment variable instead of hard coding it then it will work on those
machines as well.
Now that we have an understanding of what an environment variable is lets look at the PATH environment variable.
In your command line enter
echo %PATH% and look at the long result it returns. At first this looks confusing
but after looking at it for a little while we can see that it really is just a list of directories seperated by
semicolons. So what is this environment variable used for?
When you enter a command on the command line the system uses the PATH environment variable as an ordered list of
directories that it has to search for the command. So if your path environment variable is
c:\windows\system32;c:\windowd;c:\ and you enter the command edit it will first look in
c:\windows\system32\ for an executable called edit, it finds edit.com and runs it.
Now lets enter
notepad on the command line. The system again looks in the first entry in the path environment
c:\windows\system32\ in our example) but it doesn’t find a match. It then looks in
where it finds notepad.exe and runs it.
Finaly lets enter
asdf on the command line. The system again looks in the first entry in the path environment
c:\windows\system32) but fails to find a match. It then looks in
c:\windows where it also fails to
find a match. Finally it looks in
c:\ and failing to find a match displays an error to the user.
Adding extra directories into your PATH environment variable is easy. Simply goto your system properties and under
the advance tab click on
Environment Variables. In the
Environment Variables window that appears it is split
into two sections
User Variables and
User Variables are only for the current user logged
System Variables are for all users.
It is important to notice that the PATH environment variable appears in both
User Variables and
Windows uses both of these to create the PATH environment variable. The user’s PATH entry is concatenated onto
the end of the system entry to produce a single environment variable. This lets the administrator define a default
set of directories to be searched for all users and then individual users can add their own directories to be
searched afterwards. The general rule I use is to add to the system PATH entry only if I need multipe users of
the machine to have it in thier PATH otherwise I add directories to the user PATH entry.