# command-line line - Adding directory to PATH Environment Variable in Windows

## prompt get (14)

I am trying to add C:\xampp\php to my system PATH environment variable in Windows.

But when I type into my console:

C:\>path


it doesn't show the new C:\xampp\php directory:

PATH=D:\Program Files\Autodesk\Maya2008\bin;C:\Ruby192\bin;C:\WINDOWS\system32;C:\WINDOWS;
C:\WINDOWS\System32\Wbem;C:\PROGRA~1\DISKEE~2\DISKEE~1\;c:\Program Files\Microsoft SQL
Server\90\Tools\binn\;C:\Program Files\QuickTime\QTSystem\;D:\Program Files\TortoiseSVN\bin
;D:\Program Files\Bazaar;C:\Program Files\Android\android-sdk\tools;D:\Program Files\
Microsoft Visual Studio\Common\Tools\WinNT;D:\Program Files\Microsoft Visual Studio\Common
\MSDev98\Bin;D:\Program Files\Microsoft Visual Studio\Common\Tools;D:\Program Files\
Microsoft Visual Studio\VC98\bin


I have two questions:

1. Why did this happen? Is there something I did wrong?
2. Also, how do I add directories to my PATH variable using the console (and programmatically, with a batch file)?

This only modifies the registry. A process won't use these values until it is started after this change and doesn't inherit the environment from its parent.

You didn't specify how you started the console session. Best way to ensure this is to log out and log back in again.

If you run the command cmd, it will update all system variables for that command window.

Regarding point 2 I'm using a simple batch file that is populating PATH or other environment variables for me. Therefore, there is no pollution of environment variables by default. This batch file is accessible from everywhere so I can type:

c:\>mybatchfile
-- here all env. are available
c:\>php file.php


You don't need any set or setx command, simply open the terminal and type:

PATH


This shows the current value of PATH variable. Now you want to add directory to it? Simply type:

PATH %PATH%;C:\xampp\php


If for any reason you want to clear the PATH variable (no paths at all or delete all paths in it), type:

PATH ;


Update

Like Danial Wilson noted in comment below, it sets the path only in current session. To set the path permanently use setx but be aware, although that sets the path permanently but NOT in the current session, so you have to start a new command line to see the changes, more info here.

To check if an environmental variable exist or see its value use ECHO commnad:

echo %YOUR_ENV_VARIABLE%


1. I have installed PHP that time. Extracted php-7***.zip into C:\php\
2. Backup my current PATH environment variable: run cmd, and execute command: path >C:\path-backup.txt

3. Get my current path value into C:\path.txt file (same way)

4. Modify path.txt (sure, my path length is more than 1024 chars, windows is running few years)
• I have removed duplicates paths in there, like 'C:\Windows; or C:\Windows\System32; or C:\Windows\System32\Wbem; - I've got twice.
• Remove uninstalled programs paths as well. Example: C:\Program Files\NonExistSoftware;
• This way, my path string length < 1024 :)))
• at the end of path string add ;C:\php\
• Copy path value only into buffer with framed double quotes! Example: "C:\Windows;****;C:\php\" No PATH= should be there!!!
5. Open Windows PowerShell as Administrator.
6. Run command:

setx path "Here you should insert string from buffer (new path value)"

1. Re-run your terminal (I use "Far manager") and check: php -v

WARNING: This solution may be destructive to your PATH, and the stability of your system. As a side effect, it will merge your user and system PATH, and truncate PATH to 1024 characters. The effect of this command is irreversible. Make a backup of PATH first. See the comments for more information.

Don't blindly copy-and-paste this. Use with caution.

You can permanently add a path to PATH with the setx command:

setx /M path "%path%;C:\your\path\here\"


Remove the /M flag if you want to set the user PATH instead of the system PATH.

Notes:

• The setx command is only available in Windows 7 and later.
• You should run this command from an elevated command prompt.

In a command prompt you tell Cmd to use Explorer's command line by prefacing it with start.

So start Yourbatchname.

Note you have to register as if its name is batchfile.exe.

Programs and documents can be added to the registry so typing their name without their path in the Start - Run dialog box or shortcut enables Windows to find them.

This is a generic reg file. Copy the lines below to a new Text Document and save it as anyname.reg. Edit it with your programs or documents.

In paths use \ to seperate folder names in key paths as regedit uses a single \ to seperate it's key names. All reg files start with REGEDIT4. A semicolon turns a line into a comment. The @ symbol means to assign the value to the key rather than a named value.

The file doesn't have to exist. This can be used to set Word.exe to open Winword.exe.

Typing start batchfile will start iexplore.exe.

REGEDIT4
;The bolded name below is the name of the document or program, <filename>.<file extension>

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\Batchfile.exe]

;The @ means the path to the file is assigned to the default value for the key.
;The whole path in enclosed in a quotation mark ".

@="\"C:\\Program Files\\Internet Explorer\\iexplore.exe\""

;Optional Parameters. The semicolon means don't process the line. Remove it if you want to put it in the registry

;Informs the shell that the program accepts URLs.

;"useURL"="1"

;Sets the path that a program will use as its' default directory. This is commented out.

;"Path"="C:\\Program Files\\Microsoft Office\\Office\\"


You've already been told about path in another answer. Also see doskey /? for cmd macros (they only work when typing).

You can run startup commands for CMD. From Windows Recource Kit Technical Reference

AutoRun

HKCU\Software\Microsoft\Command Processor

Data type Range Default value
REG_SZ  list of commands  There is no default value for this entry.


Description

Contains commands which are executed each time you start Cmd.exe.

What if you mistype the path using setx? The best way is simply through the windows U.I. Control Panel->All Control Panel Items->System->Advanced System Setttings->Environment Variables

Scroll down to Path and select Edit. You can also copy and paste it into your favorite editor so you can see the entire path and more easily edit it.

A better alternative to Control Panel is to use this freeware program from sourceforge called Pathenator:

https://sourceforge.net/projects/pathenator/

However, it only workers for system that has Dot.Net 4.0 or greater such as windows 7,8, or 10.

# Safer SETX

Nod to all the comments on the @Nafscript's initial SETX answer.

• SETX by default will update your user path.
• SETX ... /M will update your system path.
• %PATH% contains system path with user path appended

## Warnings

1. Backup your PATH - SETX will truncate your junk longer than 1024 characters
2. Don't call SETX %PATH%;xxx - adds system path into the user path
3. Don't call SETX %PATH%;xxx /M - adds user path into the system path
4. Excessive batch file use can cause blindness1

The ss64 SETX page has some very good examples. Importantly it points to where the registry keys are for SETX vs SETX /M

User Variables:

HKCU\Environment

System Variables:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

## Usage instructions

### Append to User PATH

append_user_path.cmd

@ECHO OFF
REM usage: append_user_path "path"
SET Key="HKCU\Environment"
FOR /F "usebackq tokens=2*" %%A IN (REG QUERY %Key% /v PATH) DO Set CurrPath=%%B
ECHO %CurrPath% > user_path_bak.txt
SETX PATH "%CurrPath%";%1


### Append to System PATH

append_system_path.cmd. Must be run as admin.

(it's basically the same except with a different Key and the SETX /M modifier)

@ECHO OFF
REM usage: append_system_path "path"
SET Key="HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
FOR /F "usebackq tokens=2*" %%A IN (REG QUERY %Key% /v PATH) DO Set CurrPath=%%B
ECHO %CurrPath% > system_path_bak.txt
SETX PATH "%CurrPath%";%1 /M


## Alternatives

Finally there's potentially an improved version called SETENV recommended by the ss64 SETX page that splits out setting the user or system environment variables.

1. Not strictly true

Checking the above suggestions on Windows 10 LTSB, and with a glimpse on the "help" outlines (that can be viewed when typing 'command /?' on the cmd), brought me to the conclusion that the PATH command changes the system environment variable Path values only for the current session, but after reboot all the values reset to their default- just as they were prior to using the PATH command.

On the other hand using the SETX command with administrative privileges is way more powerful, it changes those values for good (or at least until the next time this command is used or until next time those values are manually GUI manipulated... ).

But for the sake of clarity i thought that sharing here the best SETX syntax usage that worked for me might help somebody one day:

SETX PATH "%PATH%;C:\path\to\where\the\command\resides"


where any equal sign '=' should be avoided, and don't you worry about spaces! there is no need to insert any more quotation marks for a path that contains spaces inside it- the split sign ';' do the job.

The PATH keyword that follows the SETX defines which set of values should be changed among the System Environment Variables possible values, and the %PATH% (the word PATH surrounded by the percent sign) inside the quotation marks, tells the OS to leave the existing PATH values as they are and add the following path (the one that follows the split sign ';' ) to the existing values.

HTH

Late to the party - but handy if you are already in the directory you want to add to PATH.

set PATH=%PATH%;%CD%

edit: as per comment - works with standard windows cmd but not in powershell.

For powershell the %CD% equivalent is [System.Environment]::CurrentDirectory

2014 UPDATE:

1) If you have installed Python 3.4 or later, pip is included with Python and should already be working on your system.

2) If you are running a version below Python 3.4 or if pip was not installed with Python 3.4 for some reason, then you'd probably use pip's official installation script get-pip.py. The pip installer now grabs setuptools for you, and works regardless of architecture (32-bit or 64-bit).

The installation instructions are detailed here and involve:

Then run the following (which may require administrator access):

python get-pip.py


To upgrade an existing setuptools (or distribute), run pip install -U setuptools

I'll leave the two sets of old instructions below for posterity.

For Windows editions of the 64 bit variety - 64-bit Windows + Python used to require a separate installation method due to ez_setup, but I've tested the new distribute method on 64-bit Windows running 32-bit Python and 64-bit Python, and you can now use the same method for all versions of Windows/Python 2.7X:

OLD Method 2 using distribute:

1. Download distribute - I threw mine in C:\Python27\Scripts (feel free to create a Scripts directory if it doesn't exist.
2. Open up a command prompt (on Windows you should check out conemu2 if you don't use PowerShell) and change (cd) to the directory you've downloaded distribute_setup.py to.
3. Run distribute_setup: python distribute_setup.py (This will not work if your python installation directory is not added to your path - go here for help)
4. Change the current directory to the Scripts directory for your Python installation (C:\Python27\Scripts) or add that directory, as well as the Python base installation directory to your %PATH% environment variable.
5. Install pip using the newly installed setuptools: easy_install pip

The last step will not work unless you're either in the directory easy_install.exe is located in (C:\Python27\Scripts would be the default for Python 2.7), or you have that directory added to your path.

OLD Method 1 using ez_setup:

Download ez_setup.py and run it; it will download the appropriate .egg file and install it for you. (Currently, the provided .exe installer does not support 64-bit versions of Python for Windows, due to a distutils installer compatibility issue.

After this, you may continue with:

1. Add c:\Python2x\Scripts to the Windows path (replace the x in Python2x with the actual version number you have installed)
2. Open a new (!) DOS prompt. From there run easy_install pip