Definindo ou modificando uma variável de ambiente (em todo o sistema) em cmd.exe

13

Estou procurando uma maneira conveniente de adicionar e / ou modificar e / ou excluir uma variável de ambiente da linha de comando. Particularmente, às vezes me vejo em situações em que preciso adicionar algumas variáveis ​​no cmd.exe.

Ficaria grato se alguém me mostrasse uma maneira não GUI de modificar (ou seja: adicionar um novo diretório) à %PATH%variável.

A mudança deve ser permanente, não apenas pela duração da cmdsessão.

René Nyffenegger
fonte
1
Eu acho que um problema que você vai encontrar é que a maioria das alterações aos permanentes , todo o sistema variáveis de ambiente requerem um logout / login (ou reiniciar) para a sessão do usuário para usar os valores modificados.
quack quixote

Respostas:

8

O método Old School de manipular diretamente variáveis ​​de registro com o comando reg estava disponível. Aqui está como você faz isso:

reg add HKCU\Environment /v PATH /d "%addonpath%;%path%" /f

Jogue isso em um script de uma linha chamado apath.bat que se parece com isso:

@echo off
reg add HKCU\Environment /v PATH /d "%~dp0;%path%" /f

Então, tudo o que você precisa fornecer é o caminho do novo diretório que você está adicionando ao chamar o script e é discado:

por exemplo: apath.bat% addonpath%

Embora Hinch esteja certo. A melhor maneira de fazer isso, se você estiver usando o Vista ou superior, é usar o comando SETX, projetado para permitir a propagação de variáveis ​​de ambiente sem o risco de manipular diretamente o registro com o comando reg que pode salvar sua máquina se você você manipula variáveis ​​ENV o suficiente para usá-lo em tempo real.

user51259
fonte
Este comando requer reinicialização?
perfil completo de Juzer Ali
Não, mas você precisa usar um novo processo (cmd).
Mike
1
Para mim, ele precisa reiniciar? porque? Estou no Windows XP, sp3.
Changwang Zhang
15

Você poderia usar setx.

Variável de usuário:

SETX PATH "%PATH%;C:\MyDir"

Variável do sistema:

SETX PATH "%PATH%;C:\MyDir" /M
Gaff
fonte
Acredito que o SETX esteja disponível desde o Vista, mas estou no XP.
René Nyffenegger 4/11/2009
talvez você consiga copiar o setx.exe de uma máquina com Vista. provavelmente não vai funcionar, mas pode.
quack quixote
2
O SETX faz parte das Ferramentas de Recursos do Windows Server 2003. Você pode simplesmente adicioná-lo ao diretório system32 ou a qualquer outro caminho adicionado ao seu caminho (ovo de galinha!).
Paradroid 4/10/10
Preciso da parte / M para poder modificar a variável do sistema, não a do usuário. Obrigado!
Andrei Sfat
Ambos os comandos especificados estão errados. Por quê? O Windows realmente mantém dois valores PATH: em todo o sistema e por usuário. Quando você digita echo %PATH%, você os vê combinados, como <system path>;<user path>. Portanto, o primeiro comando fará com que os itens atuais do caminho do sistema apareçam no caminho do usuário (o que não é tão ruim), enquanto o segundo comando fará com que os itens atuais do caminho do usuário apareçam no caminho do sistema (o que é inaceitável).
Sasha
1

Você pode usar a HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorunchave do Registro para apontar para um arquivo em lotes, para permitir alterações semipermanentes sem se aprofundar nas caixas de diálogo de configurações misteriosas.

Phoshi
fonte
Tanto quanto sei, isso influenciaria apenas as chamadas subseqüentes do cmd.exe (sem o sinalizador / d), mas não o sistema inteiro ou outros processos (posteriormente invocados).
René Nyffenegger 4/11/2009
Está correto. Acho que uma vantagem significa que você pode fazer mais sem se preocupar com os diferentes processos sem saber o que fazer. Será, no entanto, o trabalho em qualquer prompt interativo, que é sempre bom: P
Phoshi
1

Se você não quiser usar a GUI (como em Painel de controle, Sistema, Avançado, Variáveis ​​de ambiente, CAMINHO), provavelmente poderá usar REGa configuração HKCU\Environment\PATH.

  • atualizar %PATH%
  • REG ADD HKCU\Environment /v PATH /t REG\_EXPAND\_SZ /d "%PATH%" /f

As /fforças sobrescrevem o valor existente para que você não precise responder de maneira interativa à pergunta.

Editar: %PATH% precisa ser citado.

Editar: Também vale a pena notar que isso provavelmente requer uma reinicialização ou login novamente antes que entre em vigor. A alteração na GUI entra em vigor imediatamente (para novas cmd.exesessões).

Referência: http://support.microsoft.com/kb/104011

Conforme observado na referência, se você quiser escrever algum código, poderá enviar WM_SETTINGCHANGE e isso deve evitar o requisito de logon / logout.

opello
fonte
isso seria muito útil. Mas, se eu consultar essa variável, ela não retornará nada.
PA.
Hrm. No XP Pro SP3 Inglês eu recebo o meu caminho com: REG QUERY HKCU\Environment /v PATH.
Opello
é um caminho específico do usuário, não o caminho de todo o sistema. não sei onde ele mora. eles podem ser configurados para a mesma coisa, mas geralmente contêm itens separados (e seu caminho de trabalho é uma fusão dos dois).
quack quixote
Certo, está em HKCU. O artigo do Microsoft KB vinculado possui os dois locais de registro.
Opello
1
Isso é quase o que estou procurando ... se houvesse uma maneira de enviar também o WM_SETTINGCHANGE do cmd.exe.
René Nyffenegger
0

É fácil alterar o caminho no processo atual do cmd.exe:

PATH c:\MyNewDirectory;%PATH%

Você sempre pode fazer o HELP PATH para obter ajuda no comando PATH.

jdigital
fonte
1
Isso não é bom apenas para a sessão?
JL.
Sim, isso não persiste entre as sessões.
John T
JL está certo e eu estava procurando uma solução permanente. Eu editei minha pergunta de acordo.
René Nyffenegger 4/11/2009
0

Para alterações verdadeiramente permanentes em todo o sistema, você realmente deseja usar o painel de controle do sistema (também conhecido como Meu computador -> Propriedades -> Avançado -> Variáveis ​​de ambiente, para WinXP). As configurações afetam todo o sistema, incluindo programas GUI no shell do Explorer.

Se você precisar apenas dessas alterações no cmd.exeshell, poderá executar um arquivo em lote que as define sempre que iniciar uma janela do cmd.exe. A resposta de Phoshi menciona o HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun, o que parece ser uma excelente opção - fácil de fazer pequenas alterações e executar novamente a partir da linha de comando, se necessário. Mas isso não afetará as janelas da GUI ou o shell do Explorer.

Estou realmente surpreso que a Sysinternals não tenha um utilitário capaz para fazer isso. Talvez outro PStools possa fazer isso?

charlatão quixote
fonte
0

Muitas maneiras de fazer isso. REG ADD é um ou REG IMPORT (usando um arquivo .REG exportado de outro computador). SETX / M é outro. Você também pode enviá-lo usando as Preferências de Diretiva de Grupo (a maneira mais fácil de usar mãos-livres para um grande número de computadores)

Skatterbrainz
fonte
0

Outro pensamento não mencionado aqui, crie um script de autohotkey que inicie o painel de controle e o insira para você. Funciona bem se você já é um usuário AHK :-)

https://autohotkey.com/board/topic/63210-modify-system-path-gui/

E quanto à edição da chave hklm / system / currentcontrolset001 / control / session manager / environment: path? Mas a mesma chave está em hklm / system / currentcontrolset002 e hklm / system / currentcontrolset. Parece que isso pode estar correto, por aqui: /programming/3304463/how-do-i-modify-the-path-environment-variable-when-running-an-inno-setup-install

Justin Goldberg
fonte