Variáveis ​​de ambiente global x usuário do Windows

4

Preciso entender como as variáveis ​​Global x Usuário funcionam no Windows.

Caso 1: se a mesma variável é definida na seção global e do usuário , qual é o comportamento? Por exemplo, eu defini uma variável% PATH% nas seções global e do usuário e vejo apenas valor global ; existe uma maneira de 'anexar " o PATH do usuário ao PATH global ?

Caso 2: As variáveis ​​definidas na seção do usuário não são 'resolvidas' na seção global . Se eu usar o SETcomando, vejo uma lista de todas as variáveis ​​definidas ( usuário e global ), mas as 'referências cruzadas' não são resolvidas.

Por exemplo

na seção do usuário eu defino:

VAR1=test-user 

na seção global eu defino:

VAR2=%VAR1%-more;%VAR3%-more
VAR3=test-global 

com SETeu vejo:

...
VAR1=test-user
VAR2=%VAR1%-more;test-global-more
VAR3=test-global
...

Estou em uma caixa x64 do Windows 7.

Portanto, com base nos testes acima, minhas conclusões são:

  • variáveis ​​globais substituem variáveis ​​de usuário (se o nome for o mesmo, somente global é válido)
  • nenhuma referência cruzada é admitida entre usuário e variáveis ​​globais

Estou certo?

Andrea Colleoni
fonte
Posso assumir que você está gravando um arquivo em lotes?
Dave
@martineau O que escrevi acima são meus testes. Suponho um comportamento que adicionei em uma atualização à minha pergunta, mas não sei se essa é uma interpretação correta dos meus testes.
Andrea Colleoni
@ Não, estou configurando o Windows manualmente através de 'painel de controle> sistema e segurança> sistema' e, em seguida, reiniciando uma sessão CMD a cada alteração.
Andrea Colleoni
Para responder a parte da pergunta, tenho certeza de que os usuários do sistema podem fazer referência aos sistemas do sistema.
martineau

Respostas:

5

Suas conclusões não estão certas, pelo menos de acordo com meus testes.

  • As variáveis ​​do usuário podem fazer referência às do sistema (global).

    Variáveis ​​do sistema não podem fazer referência a variáveis ​​do usuário.

  • As variáveis ​​do usuário substituirão as do sistema (globais).

    Apenas no conjunto padrão, TEMP(e TMP) são definidos como a variável do usuário %USERPROFILE%\AppData\Local\Tempe ao mesmo tempo que a variável do sistema como C:\Windows\TEMP.

    PATHparece ser um caso especial, em que a variável do usuário PATH(se definida) é sempre anexada à variável do sistema em vez de substituí-la.

Prumo
fonte
Meus testes confirmam tudo, exceto uma coisa: o PATH do usuário não é anexado ao PATH da global, mas é substituído por ele. Na minha configuração, eles são escritos em casos diferentes: isso importa?
Andrea Colleoni
@AndreaColleoni O caso não deve importar. Se eu criar uma variável de usuário chamada PATH(ou path) com o valor C:\test, salve (pressione OK), abra um novo prompt de comando e digite echo %path%: C:\testaparece no final.
Bob
Eu fiz como você disse. Também renomei o PATH do usuário para USER_PATH e vi que o PATH da global é anexado automaticamente a USER_PATH. Se eu deixar os dois chamados PATH, vejo apenas o valor global de PATH.
Andrea Colleoni
@AndreaColleoni USER_PATHnão tem um significado especial para mim. Seu sistema pode ser diferente do meu por qualquer motivo ... Alguém poderia tentar e confirmar de uma maneira ou de outra?
Bob