Como posso anexar permanentemente uma entrada na variável PATH do sistema, via linha de comando?

13

O que preciso fazer:

  • Anexe uma pasta à variável de ambiente %PATH% no nível do SISTEMA.
  • Torne a mudança permanente.

Como preciso fazer isso:

  • Usando o prompt de comando ou outro método pelo qual todos os comandos necessários podem ser gravados em um arquivo .BAT .
  • Usando apenas ferramentas que estariam disponíveis em uma instalação simples do Windows XP SP3, sem conectividade com a Internet.
  • Prefiro executar o script localmente, mas também tenho acesso remoto aos sistemas de destino. No entanto, tenha em mente que não posso presumir que nenhum serviço não padrão (por exemplo, Registro Remoto) esteja habilitado nos sistemas.

Sistemas em que o script precisa funcionar:

  • Windows XP SP3
  • Windows Server 2003 SP2
  • Windows 7 SP1
  • Windows Server 2008 R2 SP1

Estou bastante familiarizado com o comando SET , mas também estou ciente de que ele geralmente substituirá a variável existente em vez de anexá-la. Isso não é aceitável. Existe outra ferramenta (ou opção para SET , que eu não conheço) que irá anexar à variável? Ou eu preciso colocar uma alternativa no script que inclua a cópia temporária da variável existente para outra variável ou arquivo de texto?

Além disso, estou ciente de que SET não alterará permanentemente a variável. Eu vi menção de SETX , mas isso não parece vir para o Windows XP SP3 (ou, pelo menos, não parece estar disponível no sistema que estou trabalhando). Existe outra maneira de tornar a mudança permanente, via edição de registro ou algo assim?

Eu fiz algumas pesquisas e aprendi um bom bocado aqui sobre a configuração de variáveis de ambiente no Windows. No entanto, ainda não encontrei uma pergunta duplicada exata que atenda às minhas necessidades. Se houver um, por favor me avise.

    
por Iszi 16.02.2012 / 16:40

2 respostas

4

O seguinte adiciona 'C: \ bin' ao seu caminho e, em seguida, salva o novo caminho no Registro:

set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %path% /f

Eu só testei isso no XP SP3, mas ele deve funcionar em versões mais recentes também.

Eu acho que um novo usuário que faz logon antes da reinicialização da máquina pode não obter o novo caminho.

Harry está certo com o comentário dele sobre% SystemRoot%, se você quiser mantê-los, você precisa primeiro puxar o valor antigo para o caminho do registro:

@echo OFF

set KEY_NAME="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
set VALUE_NAME=Path

FOR /F "usebackq skip=4 tokens=1-3" %%A IN ('REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul') DO (
  set ValueName=%%A
  set ValueValue=%%C
)

if defined ValueName (

  set newPath=%ValueValue%;C:\bin

  reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %newPath% /f

  set path=%path%;C:\bin

) else (
    @echo %KEY_NAME%\%VALUE_NAME% not found.
)
    
por 19.02.2012 / 23:55
-1
set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d ^%path^% /f
    
por 12.05.2015 / 23:26