Adicionando diretório à variável de ambiente PATH no Windows


526

Estou tentando adicionar C:\xampp\phpà minha PATHvariável de ambiente do sistema no Windows.

Eu já o adicionei usando a caixa de diálogo Variáveis ​​de ambiente.

Mas quando digito no meu console:

C:\>path

não mostra o novo C:\xampp\phpdiretório:

PATH=D:\Program Files\Autodesk\Maya2008\bin;C:\Ruby192\bin;C:\WINDOWS\system32;C:\WINDOWS;
C:\WINDOWS\System32\Wbem;C:\PROGRA~1\DISKEE~2\DISKEE~1\;c:\Program Files\Microsoft SQL
Server\90\Tools\binn\;C:\Program Files\QuickTime\QTSystem\;D:\Program Files\TortoiseSVN\bin
;D:\Program Files\Bazaar;C:\Program Files\Android\android-sdk\tools;D:\Program Files\
Microsoft Visual Studio\Common\Tools\WinNT;D:\Program Files\Microsoft Visual Studio\Common
\MSDev98\Bin;D:\Program Files\Microsoft Visual Studio\Common\Tools;D:\Program Files\
Microsoft Visual Studio\VC98\bin

Eu tenho duas perguntas:

  1. Por quê isso aconteceu? Existe algo que eu fiz de errado?
  2. Além disso, como adiciono diretórios à minha PATHvariável usando o console (e programaticamente, com um arquivo em lotes)?

43
Isso está no tópico porque é uma pergunta sobre 'ferramentas que os programadores costumam usar'. Se você desenvolve no Windows e nunca precisou modificar o PATH, estou surpreso. Para saciar o desejo de estar relacionado à programação, destaquei o que a resposta mais votada apontou: Você pode fazer isso de forma programática através do console (ou através de um arquivo em lotes).
George Stocker

1
obrigado pela revisão @GeorgeStocker bem, sim, eu fiz isso de forma programática e, mas simplesmente não tive a ideia de que precisava fazer logon novamente após aplicar as alterações na sessão do console. (e acho que é apenas no meu caso), mas a resposta mais votada geralmente responde à pergunta
Netorica 5/03/14

1
@ George - concordou, mas como está, esta pergunta foi escrita para Super Usuário, e não para Stack Overflow. O superusuário fornecerá ajuda com as configurações do servidor da Web para uso pessoal. O estouro de pilha é para perguntas de programação.
jww 9/09/14

1
Saia e abra um novo console ... Se você estiver usando o bash, isso poderá exigir uma reinicialização do sistema antes que as alterações persistam, dependendo de como / o que você está usando.
precisa

Respostas:


148

Isso modifica apenas o registro. Um processo existente não usará esses valores. Um novo processo fará isso se for iniciado após essa alteração e não herdar o ambiente antigo de seu pai.

Você não especificou como iniciou a sessão do console. A melhor maneira de garantir isso é sair do shell de comando e executá-lo novamente. Ele deve herdar o PATH atualizado.


9
Hmm, não, ele realmente apenas modifica o registro. Deveria ser um pouco óbvio fazer isso na caixa de diálogo Painel de Controle, em vez de, digamos, no prompt de comando com o comando PATH. Você pode observar o que ele faz facilmente com o Process Monitor da SysInternals, se você se importa. Usando PATH não é o mesmo, todas as alterações que você fizer serão perdidas quando o console for fechado. SETX é uma maneira de fazer alterações persistentes, como a caixa de diálogo.
Hans Passant

3
Isto está correto. Você sempre precisa reiniciar sua sessão do console antes que ela pegue novas variáveis ​​de ambiente.
precisa saber é o seguinte

1
A sessão do console atualizaria as variáveis ​​se a WM_SETTINGCHANGEmensagem fosse enviada de uma aplicação? stackoverflow.com/a/8358361
John_West

É teoricamente possível, nenhuma implementação prática de TRC que conheço realmente faz isso. Explorer faz.
Hans Passant

1
Informação de fundo corroborando esta: blogs.msdn.microsoft.com/oldnewthing/20150915-00/?p=91591
Euro Micelli

961

Opção 1

Depois de alterar PATHcom a GUI, feche e reabra a janela do console.

Isso funciona porque apenas os programas iniciados após a alteração verão o novo PATH.

opção 2

Execute este comando na janela de comando que você abriu:

set PATH=%PATH%;C:\your\path\here\

Este comando anexa C:\your\path\here\ao atual PATH.

Dividindo:

  • set- Um comando que altera as variáveis ​​de ambiente do cmd apenas para a sessão atual do cmd ; outros programas e o sistema não são afetados.
  • PATH=- Significa que PATHé a variável de ambiente a ser alterada temporariamente.
  • %PATH%;C:\your\path\here\- A %PATH%peça se expande para o valor atual de PATHe ;C:\your\path\here\é concatenada para ele. Isso se torna o novo PATH.

16
@Ilya: Eu pretendia abrir a janela do console depois que o caminho foi alterado em MeuComputador-> Propriedades-> Avançado-> Variáveis ​​Env-> Caminho. Alguns aplicativos do Windows propagam alterações de variáveis ​​de ambiente após o início e outros não. O WinXP cmd.exe não.
JimR

7
se eu sair do console e executar novamente, tenho que redefinir o caminho. Alguma idéia de como fazer essa alteração permanente?
David 天宇 Wong

2
@David 天宇 Wong Se você seguir "Meu Computador"> "Propriedades"> "Avançado"> "Variáveis ​​de Ambiente"> "Caminho". e adicione o diretório ao final dessa string, ela permanecerá. Apenas abra o console depois de fazer a alteração.
theB3RV

yup @ theB3RV, é apenas um longo caminho para fazer algo simples. É estranho que não há comando não persistente que pode ser digitado no console
David天宇Wong

12
@David 天宇 Wong Acabou de encontrar "SETX é uma maneira de fazer alterações persistentes, como a caixa de diálogo." então o comando SETX deve fazê-lo
theB3RV 13/02/2015

202

AVISO: Esta solução pode ser destrutiva para o seu PATH e a estabilidade do seu sistema. Como efeito colateral, ele mesclará o PATH do usuário e do sistema e truncará o PATH para 1024 caracteres. O efeito deste comando é irreversível. Faça um backup do PATH primeiro. Veja os comentários para mais informações.

Não copie e cole cegamente isso. Use com cuidado.

Você pode adicionar permanentemente um caminho para PATHcom o setxcomando:

setx /M path "%path%;C:\your\path\here\"

Remova o /Msinalizador se desejar definir o usuário em PATHvez do sistema PATH.

Notas:

  • O setxcomando está disponível apenas no Windows 7 e posterior.
  • Você deve executar este comando em um prompt de comando elevado.

  • Se você deseja alterá-lo apenas para a sessão atual, use set .


7
SETX /M path "%path%;C:\Program Files (x86)\Git\bin\"definir o valor PATH no nível da máquina
Lu55

7
Por que isso não é a resposta aceita? Eu imagino que a maioria das pessoas gostaria de definir seu caminho permanentemente ...
Peter Gordon


9
AVISO : Devido ao uso da %PATH%variável, este comando mescla variáveis ​​globais env com as dos usuários. Não é? Isso pode cria efeitos colaterais indesejados, especialmente com a opção / M
FF_Dev

4
AVISO 2: A %PATH%variável pode não estar sincronizada com as variáveis ​​de ambiente, pois é carregada no início do prompt de comando e nunca é recarregada posteriormente (mesmo ao executar o comando setx). Também poderia ter sido alterado localmente por scripts executados anteriormente.
FF_Dev

66

Você não precisa de qualquer setou setxde comando, basta abrir o terminal e digite:

PATH

Isso mostra o valor atual da variável PATH. Agora você deseja adicionar um diretório a ele? Basta digitar:

PATH %PATH%;C:\xampp\php

Se, por qualquer motivo, você desejar limpar a variável PATH (nenhum caminho ou excluir todos os caminhos), digite:

PATH ;

Atualizar

Como Danial Wilson observou no comentário abaixo, ele define o caminho apenas na sessão atual. Para definir o caminho permanentemente, use, setxmas esteja ciente, embora isso o defina permanentemente, mas NÃO na sessão atual, portanto, você deve iniciar uma nova linha de comando para ver as alterações, mais informações aqui .

Para verificar se existe uma variável ambiental ou ver seu valor, use o comando ECHO:

echo %YOUR_ENV_VARIABLE%

1
Funcionou :) e quanto a isso! 'PATH% PATH%;' Lembro-me disso
Dustin Woodard

12
Eu acho que isso só funciona para a instância da sessão cmd, uso setx para mudá-lo de forma permanente
Daniel Wilson

2
Não inclua citações com isso. Por exemplo, chamada em PATH %PATH%;C:\Program Files\...vez dePATH "%PATH%;C:\Program Files\..."
icc97 2/17/17

4
Não use setx! Você corre o risco de truncar sua variável de caminho, perdendo muitos outros caminhos que você passou definindo. Preste atenção aos avisos acima.
22417 STHilson em 09/03

1
@STWilson, tarde demais para ver seu comentário!
West Yang

48

Eu usaria o PowerShell!

Para adicionar um diretório ao PATH usando o PowerShell, faça o seguinte:

$PATH = [Environment]::GetEnvironmentVariable("PATH")
$xampp_path = "C:\xampp\php"
[Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path")

Para definir a variável para todos os usuários, em toda a máquina, a última linha deve ser como:

[Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path", "Machine")

Em um script do PowerShell, convém verificar a presença do seu C:\xampp\phpantes de adicionar ao PATH (caso tenha sido adicionado anteriormente). Você pode agrupá-lo em uma ifcondicional.

Então, juntando tudo:

$PATH = [Environment]::GetEnvironmentVariable("PATH")
$xampp_path = "C:\xampp\php"
if( $PATH -notlike "*"+$xampp_path+"*" ){
    [Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path", "Machine")
}

Melhor ainda, pode-se criar uma função genérica. Basta fornecer o diretório que você deseja adicionar:

function AddTo-Path{
param(
    [string]$Dir
)

    if( !(Test-Path $Dir) ){
        Write-warning "Supplied directory was not found!"
        return
    }
    $PATH = [Environment]::GetEnvironmentVariable("PATH")
    if( $PATH -notlike "*"+$Dir+"*" ){
        [Environment]::SetEnvironmentVariable("PATH", "$PATH;$Dir", "Machine")
    }
}

Você poderia melhorar as coisas fazendo um polimento. Por exemplo, use Test-Pathpara confirmar que seu diretório realmente existe.


3
para chamar SetEnvironmentVariablecom o Machineparâmetro que você precisa para abrir o PowerShell com direitos de administrador
InsOp

é amargamente decepcionante que este shell "poder" não reconhece% userprofile% nem $ userprofile .. mas, novamente, este é janelas que estamos falando
abbood

3
@abbood O que você está procurando é $env:userprofile.
precisa saber é o seguinte

3
Você também deve especificar userou machinena chamada de GetEnvironmentVariable. Caso contrário, $PATHconterá o valor da parte do usuário e da máquina do registro que explodirá desnecessariamente a variável de caminho ao armazená-la novamente.
René Nyffenegger 23/02/19

35

SETX mais seguro

Cite todos os comentários sobre a resposta inicialSETX do @ Nafscript .

  • SETXpor padrão, atualizará seu caminho de usuário .
  • SETX ... /Matualizará o caminho do sistema .
  • %PATH% contém o caminho do sistema com o caminho do usuário anexado

Advertências

  1. Faça backup do seuPATH - SETXtruncará seu lixo eletrônico com mais de 1024 caracteres
  2. Não ligarSETX %PATH%;xxx - adiciona o caminho do sistema ao caminho do usuário
  3. Não ligarSETX %PATH%;xxx /M - adiciona o caminho do usuário no caminho do sistema
  4. O uso excessivo de arquivos em lote pode causar cegueira 1

A página ss64 SETX tem alguns exemplos muito bons. Importante, ele aponta para onde estão as chaves de registro SETXvsSETX /M

Variáveis ​​de usuário:

HKCU\Environment

Variáveis ​​do sistema:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Instruções de uso

Anexar ao usuário PATH

append_user_path.cmd

@ECHO OFF
REM usage: append_user_path "path"
SET Key="HKCU\Environment"
FOR /F "usebackq tokens=2*" %%A IN (`REG QUERY %Key% /v PATH`) DO Set CurrPath=%%B
ECHO %CurrPath% > user_path_bak.txt
SETX PATH "%CurrPath%";%1

Anexar ao sistema PATH

append_system_path.cmd. Deve ser executado como administrador.

(é basicamente o mesmo, exceto com um modificador Keye um diferente SETX /M)

@ECHO OFF
REM usage: append_system_path "path"
SET Key="HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
FOR /F "usebackq tokens=2*" %%A IN (`REG QUERY %Key% /v PATH`) DO Set CurrPath=%%B
ECHO %CurrPath% > system_path_bak.txt
SETX PATH "%CurrPath%";%1 /M

Alternativas

Finalmente, existe uma versão potencialmente aprimorada chamada SETENV, recomendada pela página ss64 SETX, que se divide em definir as variáveis ​​de ambiente do usuário ou do sistema.


1. Não é estritamente verdade


24

Tarde para a festa - mas útil se você já estiver no diretório que deseja adicionar ao PATH.

set PATH=%PATH%;%CD%

editar: conforme comentário - funciona com o cmd padrão do Windows, mas não no PowerShell.

Para o PowerShell, o %CD%equivalente é[System.Environment]::CurrentDirectory


1
Meu PowerShell diz que% CD% não é reconhecido.
Paulo Matos

@PauloMatos Poderia tentar usar[System.Environment]::CurrentDirectory
nclord

4

Além de todas as respostas, se você deseja uma boa ferramenta GUI para editar as variáveis ​​de ambiente do Windows, pode usar o Rapid Environment Editor

tente! é seguro de usar e incrível!

http://www.rapidee.com/en/


2
O Windows 10 melhorou significativamente o editor de variáveis ​​Path Environment agora. Eles levaram apenas 20 anos para contornar isso.
Icc97

4
  • as alterações na linha de comando não serão permanentes, serão perdidas quando o console for fechado.
  • O caminho funciona como o primeiro a chegar, primeiro a ser servido.
  • Você pode substituir outros executáveis ​​já incluídos. Por exemplo, se você já possui outra versão em seu caminho e deseja adicionar uma versão diferente sem fazer uma alteração permanente no caminho, coloque o diretório no início do comando.

Substituir executáveis ​​já incluídos;

definir PATH = C: \ xampp \ php;% PATH%;


2

Verificando as sugestões acima no Windows 10 LTSB e com um vislumbre dos contornos de "ajuda" (que podem ser visualizados ao digitar 'comando /?' No cmd), concluí que o comando PATH altera a variável de ambiente do sistema Os valores do caminho apenas para a sessão atual, mas após a reinicialização, todos os valores são redefinidos para o padrão - exatamente como eram antes do uso do comando PATH.

Por outro lado, o uso do comando SETX com privilégios administrativos é muito mais poderoso, pois altera esses valores para sempre (ou pelo menos até a próxima vez que esse comando for usado ou até a próxima vez em que esses valores forem manipulados manualmente pela GUI ...).

Mas, por uma questão de clareza, pensei que compartilhar aqui o melhor uso da sintaxe SETX que funcionasse para mim poderia ajudar alguém um dia:

SETX PATH "%PATH%;C:\path\to\where\the\command\resides"

onde qualquer sinal de igual '=' deve ser evitado, e não se preocupe com espaços! não é necessário inserir mais aspas para um caminho que contenha espaços dentro dele - o sinal de divisão ';' faça o trabalho.

A palavra-chave PATH que segue o SETX define qual conjunto de valores deve ser alterado entre os possíveis valores das variáveis ​​de ambiente do sistema e o% PATH% (a palavra PATH cercada pelo sinal de porcentagem) dentro das aspas indica ao sistema operacional para deixar o existente PATH valores como estão e adicione o caminho a seguir (aquele que segue o sinal de divisão ';') aos valores existentes.

HTH


2

Em relação ao ponto 2 , estou usando um arquivo em lotes simples que está preenchendo PATHou outras variáveis ​​de ambiente para mim. Portanto, não há poluição das variáveis ​​de ambiente por padrão. Este arquivo em lotes é acessível de qualquer lugar para que eu possa digitar:

c:\>mybatchfile
-- here all env. are available
c:\>php file.php

Essa é uma diferença importante entre * nix-es e Windows. O lote é executado no mesmo shell e as alterações no ambiente permanecem após a saída (no escopo da sessão). No entanto, isso ocorre nos dois sentidos: um arquivo em lotes pode destruir o seu ambiente. (BTW, em * nix-es você precisaria apenas de sourceum arquivo como esse . mybatchfile).
Tomasz Gandor

Oi @ grzegorz-gajos, eu estava procurando exatamente isso, seu link para mais detalhes dá 404. Alguma alternativa?
Devkabiir

Desculpe, o conteúdo do link não está mais disponível. Eu removi.
Grzegorz Gajos

1

Em um prompt de comando, você diz ao Cmd para usar a linha de comando do Explorer, precedendo-a com start.

Então start Yourbatchname.

Observe que você precisa se registrar como se seu nome fosse batchfile.exe.

Programas e documentos podem ser adicionados ao registro, portanto, digitar seu nome sem o caminho na caixa de diálogo Iniciar - Executar ou atalho permite que o Windows os encontre.

Este é um arquivo de registro genérico. Copie as linhas abaixo para um novo documento de texto e salve-o como anyname.reg. Edite-o com seus programas ou documentos.

Nos caminhos, use \ para separar nomes de pastas nos caminhos de chave, pois o regedit usa um único \ para separar seus nomes de chave. Todos os arquivos reg começam com REGEDIT4. Um ponto-e-vírgula transforma uma linha em um comentário. O símbolo @ significa atribuir o valor à chave em vez de um valor nomeado.

O arquivo não precisa existir. Isso pode ser usado para definir o Word.exe para abrir o Winword.exe.

A digitação start batchfileiniciará o iexplore.exe.

REGEDIT4
;The bolded name below is the name of the document or program, <filename>.<file extension> 

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\Batchfile.exe]

;The @ means the path to the file is assigned to the default value for the key.
;The whole path in enclosed in a quotation mark ".

@="\"C:\\Program Files\\Internet Explorer\\iexplore.exe\""

;Optional Parameters. The semicolon means don't process the line. Remove it if you want to put it in the registry

;Informs the shell that the program accepts URLs.

;"useURL"="1"

;Sets the path that a program will use as its' default directory. This is commented out.

;"Path"="C:\\Program Files\\Microsoft Office\\Office\\"

Você já foi informado sobre o caminho em outra resposta. Veja também as doskey /?macros cmd (elas funcionam apenas ao digitar).

Você pode executar comandos de inicialização para o CMD. Referência técnica do Windows Recource Kit

AutoRun

HKCU\Software\Microsoft\Command Processor 

Data type Range Default value 
REG_SZ  list of commands  There is no default value for this entry.  

Descrição

Contém comandos que são executados sempre que você inicia o Cmd.exe.



1

Se você executar o comando cmd, ele atualizará todas as variáveis ​​do sistema para essa janela de comando.


Num sentido. O que acontece é que você inicia uma nova sessão dentro da sessão atual. A exitpartida exigirá que você ligue duas vezes, primeiro para fechar a nova e depois para fechar a primeira sessão (com o ambiente antigo).
Farway 24/07/19

1

use pathed from gtools

faz as coisas de maneira intuitiva, por exemplo:

pathed /REMOVE "c:\my\folder"
pathed /APPEND "c:\my\folder"

e mostra resultados sem a necessidade de gerar um novo cmd !


0
  1. Eu instalei o PHP nesse momento. Extraído php-7 ***. Zip em C: \ php \
  2. Faça backup da minha variável de ambiente PATH atual: execute cmde execute o comando:path >C:\path-backup.txt

  3. Obter meu valor de caminho atual no arquivo C: \ path.txt (da mesma maneira)

  4. Modifique o path.txt (claro, o comprimento do meu caminho é superior a 1024 caracteres, o Windows está rodando há alguns anos)
    • Eu removi caminhos duplicados, como 'C: \ Windows; ou C: \ Windows \ System32; ou C: \ Windows \ System32 \ Wbem; Eu tenho duas vezes.
    • Remova também os caminhos dos programas desinstalados. Exemplo: C: \ Arquivos de Programas \ NonExistSoftware;
    • Dessa forma, o comprimento da string do meu caminho <1024 :)))
    • no final do caminho, adicione; C: \ php \
    • Copie o valor do caminho apenas para o buffer com aspas duplas emolduradas! Exemplo: "C: \ Windows; ****; C: \ php \" Nenhum PATH = deve estar lá !!!
  5. Abra o Windows PowerShell como administrador.
  6. Comando de execução:

setx path "Here you should insert string from buffer (new path value)"

  1. Volte a executar o seu terminal (eu uso "Far manager") e verifique: php -v

0

Por mais trivial que possa ser, eu tive que reiniciar o Windows quando enfrentar esse problema.

Estou executando o Windows 7 x64. Fiz uma atualização manual para a variável PATH do sistema. Isso funcionou bem se eu executar o cmd.exe no menu stat. Mas se eu digitar "cmd" na barra de endereços do Windows Explorer, ele parece carregar o PATH de outro lugar, o que não teve minhas alterações manuais.

(Para evitar dúvidas - sim, fechei e executei novamente o cmd algumas vezes antes de reiniciar e isso não ajudou.)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.