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


12

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

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

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

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

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

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

因此,这意味着整个系统路径将在用户PATH中重复...绝对不是我想要的。

我想要:

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

在我看来,当您使用时,;%PATH%您要求追加现有路径(从系统路径派生)。
Daniel R Hicks

Answers:


3

PowerShell版本,为用户设置PATH:

  1. 为当前用户设置新的PATH(覆盖):
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1"
  1. 设置追加到当前用户PATH:
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)"

12

要设置用户PATH覆盖以前的任何值,请执行以下操作:

setx PATH "C:\MyPath1"

要将值“ 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" )

要将值“ 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" )

由于用户路径可能包含空格,也可能不包含空格,因此需要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.

1
需要更多解释。什么是%a,什么是%b?
OfusJK 2014年

不幸的是,如果尚未定义用户PATH,它将不起作用:(
nowox

@KJK:for /?会告诉您所有您需要知道的内容。:)我不想在这里不必要地复制所有内容,并认为无论如何信息都很容易找到。
卡兰2015年

该代码不检查用户是否 PATH已经以分号结尾,在这种情况下,应在不附加附加分号的情况下添加传递的目录。但是,此代码的最大问题是,如果字符串长度超过1024个字符,则由于将字符串截断为1024个字符并在将其添加到Windows注册表之前显示适当的信息而导致用户 损坏。因此,可能会发生以下情况,而不是附加传递的目录,而是此代码将现有用户截断(乱码)。PATHsetx PATH
Mofi

4

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

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

这会影响系统PATH变量...也许我的示例学习错误,但是我想专门更新用户PATH变量。
克里斯汀·勒默


1

这似乎可行:

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

使用local更新用户系统绝对是绝对不可能的事情。通过在最佳情况下为用户添加Windows注册表字符串,此命令行确实损坏了用户。在Windows重新启动或注销/登录后,使用此命令行的每个人都已成功破坏了用户设置,因此使用当前用户帐户运行的所有进程都使用本地设置。 PATH PATH PATH PATHc:\my-user-specifc-bin-path-which-may-contain-spaces;%C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;% PATH PATH
Mofi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.