Posso definir uma variável de ambiente do Windows (XP) em termos de outra variável de ambiente?

3

Desejo definir duas variáveis de ambiente da seguinte forma:

PROGRAM_HOME=P:
JAVA_DIR=%PROGRAM_HOME%\Java

Obviamente, os seguintes trabalhos:

dir %PROGRAM_HOME%

Mas o seguinte não:

dir %JAVA_DIR%

O que devo fazer no caso eu desejo definir JAVA_DIR em termos de PROGRAM_HOME?

EDIT: removido \ (foi um erro de digitação)

PROGRAM_HOME = P: \ ==> PROGRAM_HOME = P:

    
por Yaneeve 04.01.2010 / 12:14

3 respostas

1

Além do erro de sintaxe encontrado por fretje, se você quiser tornar essas variáveis permanentes, será necessário alterar as variáveis de ambiente do Windows.

Isso é feito no botão Painel de controle / Sistema / Avançado / Variáveis de ambiente ...

Existe também um pequeno produto chamado Rapid Environment Editor (donationware) que fornece uma interface de usuário mais clara.

EDITAR

Acho que agora entendo o que você está tentando fazer, mas isso só pode ser feito editando o registro. O seguinte artigo da Microsoft explica o processo a seguir:
Como propagar variáveis de ambiente para o sistema .

Em suma, para variáveis de ambiente do usuário, você precisa ir para a chave de registro HKEY_CURRENT_USER \ Environment, onde todas essas variáveis são armazenadas.

Lá você precisa adicionar as duas variáveis como do tipo REG_EXPAND_SZ (chamado "valor da string expandida" no regedit). Esta é a única maneira de adicionar este tipo, uma vez que o Windows, por padrão, apenas adicionará os tipos REG_SZ, que são simplesmente unexpandable.

Eu tentei agora e funciona perfeitamente bem.

    
por 04.01.2010 / 14:59
4

Acho que é porque você repete o '\'.

Quando faço o seguinte:

>set %program_home%=c:\
>set %java_dir%=%program_home%java
>dir %java_dir%

tudo funciona bem.

Claro que uma alternativa é:

>set %program_home%=c:
>set %java_dir%=%program_home%\java
>dir %java_dir%

Você pode verificar os valores das diferentes variáveis de ambiente simplesmente emitindo um comando set sem parâmetros. Então você verá que sua variável %java_dir% contém c:\java .

    
por 04.01.2010 / 14:08
2

Sim, esse é um comportamento muito estranho que eu nunca encontrei documentado, mas aqui está o que funciona.

Usando seu exemplo acima, coloque aspas ao redor da variável na última linha:

dir "% JAVA_DIR%"

Se alguém souber o porquê disso ou um link que explique isso, isso seria ótimo. O comportamento é consistente quando se refere a uma variável que foi definida em parte com outra variável.

    
por 04.01.2010 / 12:35