Cómo actualizar la variable de entorno de usuario PATH desde la línea de comandos

12

Tengo una variable PATH del sistema con la configuración del nivel del sistema. Utilizo la variable PATH del usuario para complementar el PATH con la configuración específica del usuario.

Me gustaría actualizar la variable PATH del usuario desde la línea de comandos, por ejemplo, con setx.

Pero no sé cómo hacer referencia a la ruta de usuario existente en setx.

En el siguiente comando (setx sin / M)

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

la primera RUTA significa RUTA del usuario, pero la segunda RUTA% será sustituida por la RUTA "completa" (usuario + sistema).

Por lo tanto, significa que toda la ruta del sistema se duplicaría en la RUTA del usuario ... lo que definitivamente no es lo que quiero.

Me gustaría:

  • Afecta solo a la variable de entorno PATH del usuario
  • Anexar / anteponer uno o más elementos de ruta al valor existente
  • Hazlo desde la línea de comandos.
Christian Lemer
fuente
Me parece que cuando lo usas ;%PATH%, estás pidiendo que se agregue la ruta existente (derivada de la ruta del sistema).
Daniel R Hicks

Respuestas:

3

Versión de PowerShell, establezca RUTA para el usuario:

  1. Establecer una nueva RUTA (sobrescribir) para el usuario actual:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1"
  1. Establecer anexar a la RUTA del usuario actual:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path);C:\MyPath1"
  1. Establecer anteponer al usuario actual RUTA:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1;$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path)"
Tho Ho
fuente
12

Para establecer la RUTA del usuario sobrescribiendo cualquier valor anterior:

setx PATH "C:\MyPath1"

Para anteponer un valor "C: \ MyPath0" a la RUTA de usuario existente:

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" )

Para agregar un valor "C: \ MyPath2" a la RUTA de usuario existente:

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" )

La condición if-else es necesaria porque la RUTA del usuario puede contener o no espacios. Si lo desea, puede guardar los comandos como archivos por lotes genéricos (asegúrese de duplicar cada signo%) que acepten el valor que se establecerá / agregará / agregará como argumento.

Archivo por lotes

:: 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.
Karan
fuente
1
Se necesita más explicación. ¿Qué es% a, qué es% b?
OfusJK
Desafortunadamente, no funciona si la RUTA del usuario aún no está definida :(
nowox
@KJK: for /?te dirá todo lo que necesitas saber. :) No quería replicarlo todo aquí innecesariamente y pensé que la información sería fácil de entender de todos modos.
Karan
El código no verifica si el usuario PATH ya termina con un punto y coma, en cuyo caso el anexo del directorio pasado debe hacerse sin un punto y coma adicional. Pero el mayor problema con este código es la corrupción del usuario PATH si la cadena tiene más de 1024 caracteres debido a que la cadena se setx trunca a 1024 caracteres y muestra una información adecuada antes de agregarla al registro de Windows. Por lo tanto, podría suceder que en lugar de agregar un directorio pasado, el usuario existente PATHsea ​​truncado (confuso) por este código.
Mofi
4

necesidad SETX /M, predeterminado SETXestablecido enHKEY_CURRENT_USER

SETX /M PATH c:\my-bin-path;%PATH%
STTR
fuente
Esto afecta a la variable PATH del sistema ... tal vez mi ejemplo fue un error, pero me gustaría actualizar la variable PATH del usuario específicamente.
Christian Lemer
@Chris op111.net/82
STTR
1

Esto parece funcionar:

setx PATH "c:\my-user-specifc-bin-path-which-may-contain-spaces;"%%PATH%%
rsphillips
fuente
Es absolutamente NO IR, NUNCA NUNCA actualizar usuario o sistema PATH usando local PATH . Esta línea de comando realmente corrompe al usuario PATH al agregar al registro de Windows para el usuario PATH la cadena c:\my-user-specifc-bin-path-which-may-contain-spaces;%C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;%en el mejor de los casos. Todos los que usan esta línea de comando han corrompido con éxito la configuración del usuario PATH y son tan locales PATH como lo utilizan todos los procesos que se ejecutan con la cuenta de usuario actual después del reinicio de Windows o el cierre de sesión / inicio de sesión.
Mofi