Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Add to PATH environment variable if value does not already exist

Posted on 2013-05-16
3
Medium Priority
?
1,746 Views
Last Modified: 2013-07-04
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?
0
Comment
Question by:Blowfelt82
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 85

Accepted Solution

by:
oBdA earned 2000 total points
ID: 39170894
"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
 
LVL 57

Expert Comment

by:Bill Prew
ID: 39171066
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
 
LVL 11

Expert Comment

by:paultomasi
ID: 39192960
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

Featured Post

NFR key for Veeam Agent for Linux

Veeam is happy to provide a free NFR license for one year.  It allows for the non‑production use and valid for five workstations and two servers. Veeam Agent for Linux is a simple backup tool for your Linux installations, both on‑premises and in the public cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

One of my most closely kept secrets is revealed in this discussion How to output text on the same line This question was recently posted in EE by Simon336697 (http://www.experts-exchange.com/Programming/Languages/Scripting/Shell/Batch/Q_2459…
YESTERDAY YESTERDAY.BAT is inspired by a previous article I wrote entitled: TOMORROW.BAT (http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/MS_DOS/A_4196-Advanced-Batch-File-Programming-TOMORROW-BAT.html). The crux of this batch f…
In this video you will find out how to export Office 365 mailboxes using the built in eDiscovery tool. Bear in mind that although this method might be useful in some cases, using PST files as Office 365 backup is troublesome in a long run (more on t…
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…

721 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question