
Por alguma razão, existem certas variáveis de ambiente que não serão expandidas quando usadas no"CAMINHO"variável nas Variáveis do Sistema.
Por exemplo, %SystemRoot%
funciona muito bem, mas %WinDir%
não funciona. %ProgramFiles%
e %ProgramFiles(x86)%
também não funciona.
Obviamente eu sei que poderia usar o caminho completo em vez de uma variável, mas esse não é o ponto.
Alguma ideia?
Aqui está uma captura de tela/exemplo:
Responder1
SystemRoot
expande conforme o esperado porque é uma variável de ambiente pseudo/predefinida. WinDir
é uma variável de ambiente regular e "compete" com outras, como PATH
na sequência de inicialização.
Melhor explicado por Raymond Chen emSegredos do Windows: as variáveis ocultas: "Incorporar uma variável de ambiente dentro de outra é simplesmente uma questão de bom timing operacional". Citando mais:
Veja como funciona o processo de construção do ambiente. Ele prossegue em aproximadamente quatro etapas:
- Primeiro, o sistema cria algumas variáveis de ambiente predefinidas para toda a máquina, como SystemRoot e ALLUSERSPROFILE (mas não COMPUTERNAME ou ProgramFiles).
- Segundo, ele cria variáveis de ambiente na seção Sistema da caixa de diálogo Variáveis de ambiente. As definições de variáveis de ambiente do sistema podem usar a notação “%” para se referir às variáveis de ambiente predefinidas criadas na etapa anterior. Por exemplo, você pode definir uma variável de ambiente do sistema como %SystemDrive%\Extras. Após a conclusão do ambiente do sistema, o Windows começa a construir o ambiente do usuário.
- A terceira etapa é criar variáveis de ambiente predefinidas por usuário, como USERPROFILE e APPDATA. As variáveis relacionadas a COMPUTERNAME e ProgramFiles também são criadas aqui, embora sejam tecnicamente variáveis de sistema e não variáveis por usuário.
- Finalmente, o sistema cria as variáveis de ambiente. Eles estão na seção Usuário da caixa de diálogo Variáveis de ambiente e têm acesso a quaisquer variáveis criadas pelas três primeiras etapas, portanto, você pode definir uma variável de ambiente de usuário como %USERPROFILE%\Extras ou uma variável de ambiente de sistema personalizada definida na segunda etapa . Se uma variável de ambiente User tiver o mesmo nome de uma variável de ambiente System, o novo valor substituirá o antigo.
...
Um cliente estava tendo dificuldades para definir a variável de ambiente System PATH como %APPDATA%;C:\Windows. Eles descobriram que o ambiente final continha apenas o caminho literal conforme especificado (sinais de porcentagem e tudo), em vez de substituí-lo pelo valor da variável de ambiente APPDATA. Se você observar a sequência de operações detalhada anteriormente, fica claro por que isso ocorreu. Eles estavam tentando definir uma variável de ambiente do sistema com base em uma variável que ainda não havia sido definida.
A solução foi simples: mova a edição do PATH da caixa de listagem Ambiente do sistema para a caixa de listagem Ambiente do usuário. Dessa forma, quando quisesse usar a variável de ambiente %APPDATA%, a variável estaria lá.
Para um exemplo simples de possíveis "condições de corrida" ao definir variáveis de ambiente baseadas em outras, considere o caso circular onde se definem duas variáveis de sistema como:
bbb=%ccc%
ccc=%bbb%
No meu Windows 7, isso resulta na avaliação das variáveis para:
C:\etc>set
...
bbb=%ccc%
ccc=%ccc%