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

Chr*_*mer 12 windows path command-line environment-variables

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

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

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

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

setx PATH c:\my-user-specifc-bin-path;%PATH%
Run Code Online (Sandbox Code Playgroud)

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

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

我想要:

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

Kar*_*ran 12

设置用户路径覆盖任何以前的值:

setx PATH "C:\MyPath1"
Run Code Online (Sandbox Code Playgroud)

要将值“C:\MyPath0”添加到现有用户路径:

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" )
Run Code Online (Sandbox Code Playgroud)

要将值“C:\MyPath2”附加到现有用户路径:

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" )
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

  • 需要更多解释。 %a 是什么,%b 是什么? (2认同)

小智 4

PowerShell版本,为用户设置PATH:

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