Existem regras para nomes de variáveis de ambiente do Windows 7?

2

No meu computador com Windows 7, criei algumas variáveis de ambiente de usuário personalizadas (clique com o botão direito em propriedades do computador > > "Configurações avançadas do sistema" > "Variáveis de ambiente ..." > "Novo ..." para " Variáveis do usuário para ... "), mas quando eu ecoar no prompt de comando parece não reconhecer um. Por exemplo, isso é o que eu tinha:

UTILS_HOME  C:\myUtils
UTILS_WILDFLY  %UTILS_HOME%\wildflyUtils

Eu adicionei ambos à variável PATH em minhas variáveis de usuário como esta:

PATH  %UTILS_HOME%;%UTILS_WILDFLY%

Quando faço eco do PATH, recebo isto:

C:\mytils;%UTILS_WILDFLY%

Espero que isso expanda o UTILS_WILDFLY, mas não o faça. Agora, se eu mudar o nome de UTILS_WILDFLY para JBOSS_8, quando eu fizer o eco do caminho, ele será expandido. Eu tentei vários nomes para testar e não entendo porque alguns expandem e porque alguns não. Quando eles não se expandem, não consigo acessar meus scripts nessa pasta na linha de comando.

Existe alguma regra que eu não conheço para nomear variáveis de ambiente ou é assim que funciona e tenho que fazer uma tentativa e erro até encontrar uma que funcione?

Não há erros de digitação ao tentar nomes diferentes. Eu criei o nome para a variável e copiei e colei na variável PATH para descartar isso.

    
por Chuck L 09.10.2014 / 20:49

2 respostas

4

O problema é que você está usando a expansão recursiva, ou seja, o PATH faz referência a UTILS_WILDFLY, que, por sua vez, faz referência a UTILS_HOME.

Expansão recursiva nem sempre funciona; presumivelmente isso significa que ele não é suportado, então não há garantia de que ele irá funcionar - o que significa que você não deveria usá-lo - mas na prática ele funciona algumas vezes, daí a confusão.

Especificamente, no Windows 7, ele funciona se e somente se a variável no meio da expansão recursiva (UTILS_WILDFLY) aparecer antes da variável que está sendo expandida (PATH) na lista de variáveis no registro. Quando isso acontece, as variáveis de ambiente são alfabetizadas.

No seu caso,

  • UTILS_WILDFLY > PATH, então isso não funciona.

  • JBOSS_8 < PATH, então isso acontece.

O PATI não funcionará, mas o PATG o fará.

    
por 11.10.2014 / 07:56
0

Eu também encontrei essa pergunta. Embora essa pergunta seja feita, gostaria de fornecer uma solução rápida para futuros usuários.

Na minha situação, criei duas variáveis de env JAVA_HOME e GRADLE_HOME .

D:\>echo %JAVA_HOME%
D:\Program Files\Java\jdk1.8.0_121

D:\>echo %GRADLE_HOME%
D:\Program Files\gradle-3.5

Em seguida, %JAVA_HOME%\bin e %GRADLE%_HOME\bin to Path . Mas por echo %Path% ,

D:\Program Files\Java\jdk1.8.0_121\bin;D:\Program Files\Java\jdk1.8.0_12 1\jre;%GRADLE_HOME%\bin;%GROOVY_HOME%\bin; Mesma situação.

Eu também verifiquei o reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v * sugerido por @eryksun, o resultado é ordem alfabética. Portanto, a resposta para a causa raiz dessa pergunta pode não ser o Windows expande env var na ordem alfabética .

Minha solução alternativa,

GRADLE_HOME -> GGRADLE_HOME depois, mude de volta. GGRADLE_HOME -> GRADLE_HOME

Espero que alguém proficiente no Windows possa dar uma explicação para esse tipo de problema.

    
por 14.05.2017 / 09:59