Como atualizar a variável de ambiente do usuário PATH a partir da linha de comando

10

Eu tenho uma variável PATH do sistema com a configuração no nível do sistema. Eu uso a variável PATH do usuário para complementar o PATH com a configuração específica do usuário.

Eu gostaria de atualizar a variável PATH do usuário da linha de comando, por exemplo, com setx.

Mas não sei como referenciar o caminho do usuário existente no setx.

No seguinte comando (setx sem / M)

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

o primeiro PATH significa o PATH do usuário, mas o segundo% PATH% será substituído pelo PATH "completo" (user + system).

Isso significa que todo o caminho do sistema seria duplicado no PATH do usuário ... o que definitivamente não é o que eu quero.

Eu gostaria de:

  • Afeta somente a variável de ambiente PATH do usuário
  • Anexar / pré-adicionar um ou mais elementos do caminho ao valor existente
  • Faça isso na linha de comando.
por Christian Lemer 28.05.2013 / 22:42

3 respostas

9

Para definir o PATH do usuário sobrescrevendo qualquer valor anterior:

setx PATH "C:\MyPath1"

Para acrescentar um valor "C: \ MyPath0" ao CAMINHO do usuário 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 acrescentar um valor "C: \ MyPath2" ao CAMINHO do usuário 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" )

A condição if-else é necessária porque o PATH do usuário pode ou não conter espaços. Se você quiser, pode salvar os comandos como arquivos de lote genéricos (certifique-se de dobrar cada sinal%) que aceita o valor a ser definido / prefixado / anexado como um argumento.

Arquivo em lote

:: 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.
    
por 29.05.2013 / 00:01
4

precisa de SETX /M , padrão SETX definido como HKEY_CURRENT_USER

SETX /M PATH c:\my-bin-path;%PATH%
    
por 28.05.2013 / 23:18
1

Isso parece funcionar:

setx PATH "c:\my-user-specifc-bin-path-which-may-contain-spaces;"%%PATH%%
    
por 02.08.2015 / 19:45