Certas variáveis ​​não serão expandidas nas variáveis ​​de ambiente do sistema Windows PATH

Certas variáveis ​​não serão expandidas nas variáveis ​​de ambiente do sistema Windows PATH

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:

insira a descrição da imagem aqui

Responder1

SystemRootexpande conforme o esperado porque é uma variável de ambiente pseudo/predefinida. WinDiré uma variável de ambiente regular e "compete" com outras, como PATHna 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%

informação relacionada