Como anexar variáveis ​​de ambiente definidas pelo usuário à PATH da variável de sistema no Windows 7?

9

Eu tenho duas variáveis ​​definidas pelo usuário:

ANT_HOME definido como% USERPROFILE% \ Developer \ Ferramentas \ Apache \ Apache Ant \ apache-ant-1.8.2 JAVA_HOME definido como C: \ Arquivos de Programas \ Java \ jdk1.6.0_23

E eu quero acrescentar esses caminhos à variável System para que eu possa acessar os executáveis ​​em suas pastas bin. eu tentei

PATH definido como [outros caminhos];% ANT_HOME% \ bin;% JAVA_HOME% \ bin

No entanto, isso não funciona. Quando abro um prompt de comando e echo% PATH%, as variáveis ​​do usuário não são expandidas . Portanto, o caminho mostra apenas o literal;% ANT_HOME% \ bin;% JAVA_HOME% \ bin

Eu me lembro disso funcionando bem em meus antigos sistemas Windows XP. Como faço para configurar isso no Windows 7?

Michael Prescott
fonte
Acabei de encontrar um artigo de Suporte da Microsoft desde 2007 descrevendo um bug no Shell32.dll. Adicionei uma variável PATH à minha lista de variáveis ​​de usuário com PATH definida como% PATH%;% ANT_HOME% \ bin;% JAVA_HOME% \ bin e resolvi o problema. Não gosto de defini-lo apenas para meu usuário, mas de alguma forma meu sistema apresenta o sintoma desse bug antigo e não vejo outra resposta melhor ainda. O artigo está em: support.microsoft.com/kb/329308
Michael Prescott

Respostas:

5

ATUALIZAÇÃO NO.2 - Agora, para a pergunta real : Por que variáveis ​​aninhadas criadas pelo usuário não conseguem se expandir?

Existem alguns problemas gerais relacionados à expansão de variáveis ​​no Windows. Eu já enfrentei o mesmo problema e não encontrei circunstâncias claras e reproduzíveis - o nível de recursão em que a expansão falha não é consistente, caracteres especiais parecem não desempenhar um papel etc.

A única solução viável que encontrei é adicionar variáveis ​​ao nível de recursão por nível de recursão. Isso significa: tente excluir todas as variáveis ​​que você deseja aninhar umas às outras (incluindo chamadas de PATH para suas variáveis ​​definidas pelo usuário) e, em seguida, inicie do zero. Defina suas variáveis ​​básicas (etc. ANT-HOME), confirme, verifique se ele foi expandido, se for, continue com o próximo nível de confirmação, verifique ... você entendeu.

RESPOSTA ATUALIZADA - Definindo variáveis ​​de ambiente permanentes usando a CLI e a GUI - Role para baixo para obter a resposta original

Método da GUI:

No Windows 7, digite "system" no META-Prompt e você verá a entrada "Edit the System Environment Variables". A partir daí, clique em "Variáveis ​​de ambiente". Lá, você pode editar a variável de sistema PATH (lista inferior) ou adicionar / editar uma nova variável PATH às variáveis ​​de ambiente do usuário.

Método de linha de comando:

Para alterar variáveis ​​de ambiente permanentemente, você deve usar o comando SETX na linha de comando do Windows. Diferente de outras versões do Windows, ele vem embutido no Windows 7. Sua sintaxe difere muito do SET, mas também é poderosa. Você terá que ter um pouco de cuidado, porém, é fácil bagunçar suas variáveis ​​com o SETX.

  • Por padrão, você altera as variáveis ​​do usuário . Você pode ter uma variável de ambiente do usuário PATH que coexista felizmente com a variável PATH do sistema. Se você ainda não o definiu, faça isso digitando:SETX PATH yourpath

  • Você também pode adicionar um valor à variável de sistema PATH. Para fazer isso, primeiro você precisa abrir uma linha de comando com privilégios de administrador. Para fazer isso, pressione a tecla Meta (Windows), digite cmde pressione CTRL+ SHIFT+ ENTERe confirme a caixa de diálogo UAC.

Para adicionar novos valores ao caminho, agora você pode inserir

setx path "%path%;yournewpath" /m

É importante seguir essa sintaxe! Se você não incluir% path% primeiro, todos os valores existentes do caminho serão perdidos e substituídos por apenas o novo caminho. A opção / m no final define a variável no ambiente do sistema.

Observe que você precisará criar uma nova linha de comando para fazer uso de sua nova variável.

Há também uma referência completa para o SETX no TechNet .

RESPOSTA ANTIGA O comando SET atualiza as variáveis ​​apenas pela duração da sessão atual da linha de comandos.

A sintaxe correta para adicionar um valor a uma variável é 'set [variable] =% [variable]%; [new value] `

Observe que à esquerda do sinal de igual, você deve omitir os sinais de porcentagem!

Fonte: Referência da linha de comando do TechNet para Windows Server

Tobias Plutat
fonte
1
Obrigado por uma resposta muito detalhada. Pessoalmente, sempre preferi o método GUI, porque acho que é mais fácil me comunicar com minha equipe. Destacamos o problema que estou tendo no meu post original para maior clareza. As variáveis ​​de usuário não estão se expandindo no Windows 7, como no Windows XP. Isso não funciona mais ou devo investigar a segurança ou outras configurações do administrador do sistema que possam estar bloqueando o comportamento normal?
Michael Prescott
Isso é uma maneira muito agradável de dizer "Você está completamente fora de questão";)
Tobias Plutat
... e agora meus 2 centavos na questão real. Veja a edição mais recente de respostas.
Tobias Plutat
1

Um artigo de Suporte da Microsoft de 2007 - número 329308 - descreve um bug no Shell32.dll, que é a causa desse problema. A solução é adicionar uma PATHvariável à lista de variáveis ​​do usuário definida como

%ANT_HOME%\bin;%JAVA_HOME%\bin

Isso funcionou em torno do problema. Não gosto de defini-lo apenas para meu usuário, mas de alguma forma meu sistema apresenta sintomas desse bug antigo e não vejo outra resposta melhor ainda.

Michael Prescott
fonte