如何从命令行更新 PATH 用户环境变量

如何从命令行更新 PATH 用户环境变量

我有一个包含系统级配置的系统 PATH 变量。我使用用户 PATH 变量来补充具有用户特定配置的 PATH。

我想更新用户 PATH 变量从命令行例如使用 setx。

但是我不知道如何在setx中引用现有的用户路径。

在以下命令中(不带 /M 的 setx)

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

第一个 PATH 表示用户 PATH,但第二个 %PATH% 将被“完整”(用户 + 系统) PATH 替换。

所以这意味着整个系统路径将在用户 PATH 中重复……这绝对不是我想要的。

我想:

  • 仅影响用户 PATH 环境变量
  • 将一个或多个路径元素附加/添加到现有值
  • 从命令行执行。

答案1

PowerShell 版本,为用户设置 PATH:

  1. 为当前用户设置新路径(覆盖):
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1"
  1. 设置附加到当前用户路径:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path);C:\MyPath1"
  1. 设置当前用户 PATH 的前缀:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1;$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path)"

答案2

要设置用户路径并覆盖任何先前的值:

setx PATH "C:\MyPath1"

要将值“C:\MyPath0”添加到现有的用户 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" )

要将值“C:\MyPath2”附加到现有的用户 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" )

因为用户路径可能包含空格,也可能不包含空格,所以 if-else 条件是必需的。如果您愿意,可以将命令保存为通用批处理文件(确保将每个 % 符号加倍),这些文件接受要设置/添加/附加的值作为参数。

批处理文件

:: 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.

答案3

需要SETX /M,默认SETX设置为HKEY_CURRENT_USER

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

答案4

这似乎有效:

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

相关内容