Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I add to the Windows PATH variable using setx? Having weird problems

I want to modify the Windows PATH variable using setx. The following works at least 50% of the time on Windows 8:

setx PATH %PATH%;C:\Python27\;C:\Python27\Scripts\ 

If it gives the error "the default argument can only be used 2 times", then the following works some of the time:

setx PATH "%PATH%;C:\Python27\;C:\Python27\Scripts\" 

The difference is that we wrapped the second argument in quotes. I believe the quotes are necessary when %PATH% expands to include spaces.

However, I have encountered some weird problems on Windows 7. On one particular Windows 7 machine, I had this problem:

echo %PATH% 

It prints:

C:\Foo\;C:\Bar\;[...lots of stuff...]C:\Baz\ 

Then I do this:

setx PATH "%PATH%;C:\Quux\" 

Then it says "Error: Truncated at 1,024 characters." Now let's check what PATH contains:

echo %PATH% 

It prints:

C:\Foo\;C:\Foo\;C:\Bar\;C:\Bar\;[...lots of stuff, now duplicated...]C:\B 

...and it is cut off at 1,024 characters. It ran over because of the duplicates. Also interesting: The value of PATH changes despite the fact that setx raised an error and did not say "Success".

I was able to repeat this strange behavior several times (luckily I had saved the original contents of PATH).

At the moment, the only surefire way I know to append to the PATH is the following:

  1. echo the PATH.

  2. Copy the contents of PATH into a text file and manually add ;C:\Python27\;C:\Python27\Scripts\ to the end of the PATH.

  3. Copy the whole thing out of the text file.

  4. setx PATH "<paste the string here>"

That process works every single time on both Windows 7 and Windows 8.

I should really be able to do this in one command. What am I doing wrong?

like image 243
SerMetAla Avatar asked Oct 10 '13 04:10

SerMetAla


People also ask

How do I add to my Windows PATH?

Click the “Environment Variables…” button. Under the “System Variables” section (the lower half), find the row with “Path” in the first column, and click edit. The “Edit environment variable” UI will appear. Here, you can click “New” and type in the new path you want to add.


2 Answers

Run cmd as administrator, then:

setx /M PATH "%PATH%;<your-new-path>" 

The /M option sets the variable at SYSTEM scope. The default behaviour is to set it for the USER.

TL;DR

The truncation happens because when you echo %PATH% you get the concatenation of SYSTEM and USER values so, when you add it in your second argument to setx, the command will try to fit the contents of both SYSTEM and USER within the USER var. When you echo again, the result will be doubled.

The /M option requires administrator privilege, so you need to open your terminal with "run as administrator" otherwise setx will fail with "access to registry path is denied".

Note: You won't see the new value when you echo %PATH% just after setting it this way, you need to close cmd and open again.

If you want to check the actual values stored in registry check this question.

like image 105
Victor Basso Avatar answered Sep 30 '22 18:09

Victor Basso


This works perfectly:

for /f "usebackq tokens=2,*" %A in (`reg query HKCU\Environment /v PATH`) do set my_user_path=%B  setx PATH "C:\Python27;C:\Python27\Scripts;%my_user_path%" 

The 1st command gets the USER environment variable 'PATH', into 'my_user_path' variable The 2nd line prepends the 'C:\Python27;C:\Python27\Scripts;' to the USER environment variable 'PATH'

like image 37
Manohar Reddy Poreddy Avatar answered Sep 30 '22 19:09

Manohar Reddy Poreddy