Add to PATH environment variable if value does not already exist

I am using the following to add to my PATH environment variable in DOS

Path=%Path%;C:\Windows\Microsoft.NET\Framework\v3.5

This works as expected, but the batch file will be run repeatedly so I want to add some code that will only append to the batch file if the value is not actually there? Is this possible?

Also, when I use the SET command in DOS the changes I have made to the environment variable are shown, but when I try and access the information via My Computer > Environment Variables it doesn't look like these have been refreshed? Is there a command I can use to refresh these?
Blowfelt82Asked:
Who is Participating?
 
oBdAConnect With a Mentor Commented:
"Set" can only set variables whose scope is the current command prompt; as soon as the prompt is closed, the environment variables are gone.
If you want it to be available permanently, you need "setx.exe" (which does not set the variable for the current session!).
@echo off
set AddPath=C:\Windows\Microsoft.NET\Framework\v3.5
echo path| find /i "%AddPath%" >NUL
if errorlevel 1 (
	set Path=%Path%;%AddPath%
	setx.exe /m Path "%Path%;%AddPath%"
)

Open in new window

0
 
Bill PrewCommented:
A couple of notes.  First, I think the PATH in the above FIND needs % around it.  In addition, we need to watch out to make sure we match the full path we are trying to add, not just a subset of an existing but different path.  For example if we wanted to add "c:\temp" anmd there was already a c:\tempold" the above would fail to add.  Below are a couple of ways to deal with that, one adds a semicolon to the end of the new path to make sure it's a full match.  The other parses the current path breaking it up at the existing semicolons and then compares to the full path (some trickery needed there).

Also of course keep in mind that the PATH command is a bit odd, and there are other uncommon situations that can occur.  For example the paths can be relative in the PATH variable.  And it will work with paths using either \ or / between folder names.  Paths can be added with a training \ or not.  And Paths can be added with quotes around them. So lots of odd cases, but typically we just check for the normal stuff.

@echo off
set AddPath=C:\Windows\Microsoft.NET\Framework\v3.5
echo %PATH%; | find /i "%AddPath%;" >NUL || (
  set Path=%PATH%;%AddPath%
  setx.exe /m PATH "%PATH%;%AddPath%"
)

Open in new window

@echo off
set AddPath=C:\Windows\Microsoft.NET\Framework\v3.5
set Found=N
for %%A in ("%PATH:;=","%") do if /i "%%~A" EQU "%AddPath%" set Found=Y
if "%Found%" EQU "N" (
  set Path=%PATH%;%AddPath%
  setx.exe /m PATH "%PATH%;%AddPath%"
)

Open in new window

~bp
0
 
Paul TomasiCommented:
The proper way to do it is with the following command:

if not defined AddPath setx AddPath C:\Windows\Microsoft.NET\Framework\v3.5 /m

Open in new window

After issuing this command, open another DOS box and you will see the variable is set using the SET command.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.