-
Notifications
You must be signed in to change notification settings - Fork 84
/
Copy pathupdate-path.bat
64 lines (56 loc) · 1.44 KB
/
update-path.bat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
@echo off
rem intentionally not calling setlocal
rem because we want to update our caller's PATH
rem among others
if "%*"=="" (
echo update-path requires a path
goto END
)
if not exist "%*" (
echo Non-existent path: %*
goto END
)
rem the value of the "path" variable is initialized to:
rem (machine path)
rem or
rem (machine path);(user path)
rem
rem we don't have (or want) privileges to update the machine path, which would require elevation
rem so we'll set the user path
rem but we'll take care not to duplicate the machine path into the user path
rem
rem we'll also update this process's path variable
rem
rem for extensibility we'll set the user "path" variable once, to %userpath% (a literal)
rem then we will just maintain the "userpath" variable
if "%userpath%"=="" (
rem this is the first time we've set a user path
setx path "%%userpath%%"
set userpath=%*
goto :SET_PATH
)
rem check to see if we already have this path
call :CHECK_USERPATH %%userpath:%*=%%
if errorlevel 2 (
rem %* is already in the path, so this is a no-op
goto END
) else if errorlevel 1 (
rem %* is not in the path and needs to be added
set userpath=%userpath%;%*
goto :SET_PATH
) else (
echo Unexpected errorlevel %errorlevel%
goto END
)
:SET_PATH
rem actually add the path
set path=%path%;%*
setx userpath "%userpath%"
goto END
:CHECK_USERPATH
if /i "%*" == "%userpath%" (
exit /b 1
) else (
exit /b 2
)
:END