How to update the PATH user environment variable from command-line

All we need is an easy explanation of the problem, so here it is.

I have a system PATH variable with the system level config.
I use the user PATH variable to complement the PATH with user-specific config.

I would like to update the user PATH variable from command-line for example with setx.

But I don’t know how to reference the existing user path in setx.

In the following command (setx without /M)

setx PATH c:\my-user-specifc-bin-path;%PATH%

the first PATH means user PATH but the second %PATH% will be substituted by the “full” (user + system) PATH.

So it means that the entire system path would be duplicated in the user PATH… what is definitively not what I want.

I would like to:

  • Affect only the user PATH environment variable
  • Append/Prepend one or more path element to the existing value
  • Do it from the command-line.

How to solve :

I know you bored from this bug, So we are here to help you! Take a deep breath and look at the explanation of your problem. We have many solutions to this problem, But we recommend you to use the first method because it is tested & true method that will 100% work for you.

Method 1

PowerShell version, set PATH for user:

  1. Set new PATH (overwrite) for current user:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1"
  1. Set append to current user PATH:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path);C:\MyPath1"
  1. Set prepend to current user PATH:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1;$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path)"

Method 2

To set the User PATH overwriting any previous value:

setx PATH "C:\MyPath1"

To prepend a value “C:\MyPath0” to the existing User PATH:

for /f "skip=2 tokens=3*" %a in ('reg query HKCU\Environment /v PATH') do @if [%b]==[] ( @setx PATH "C:\MyPath0;%~a" ) else ( @setx PATH "C:\MyPath0;%~a %~b" )

To append a value “C:\MyPath2” to the existing User PATH:

for /f "skip=2 tokens=3*" %a in ('reg query HKCU\Environment /v PATH') do @if [%b]==[] ( @setx PATH "%~a;C:\MyPath2" ) else ( @setx PATH "%~a %~b;C:\MyPath2" )

The if-else condition is required because the User PATH may or may not contain spaces. If you want you can save the commands as generic batch files (be sure to double each % sign) that accept the value to be set/prepended/appended as an argument.

Batch File

:: PATH-ADD - add a path to user path environment variable

@echo off
setlocal

:: set user path
set ok=0
for /f "skip=2 tokens=3*" %%a in ('reg query HKCU\Environment /v PATH') do if [%%b]==[] ( setx PATH "%%~a;%1" && set ok=1 ) else ( setx PATH "%%~a %%~b;%1" && set ok=1 )
if "%ok%" == "0" setx PATH "%1"

:end
endlocal
echo.

Method 3

need SETX /M, default SETX set to HKEY_CURRENT_USER

SETX /M PATH c:\my-bin-path;%PATH%

Method 4

This seems to work:

setx PATH "c:\my-user-specifc-bin-path-which-may-contain-spaces;"%%PATH%%

Note: Use and implement method 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply