
SET
"temporariamente"define/altera um environment variable
.
Como obtenho o "original"/"global"/"inalterado" de um shell/processo no qual ele foi alterado?
Para explicar o título: SET
funciona no que chamarei de
escopo locale SETX
em umglobalum.
%ABC%
me dá a variável doescopo local, mas estou procurando algo para obtê-lo doglobalum.
Por isso SET
: SETX
:: %ABC%
: ???
Responder1
Para evitar confusão com a terminologia usada em domínios em redes, em vez de 'local' diga 'por usuário', e em vez de 'global' diga 'por máquina' (para todos os usuários locais).
'Local' realmente significa 'somente nesta máquina' e pode significar paratodosusuários locais.
Variáveis por máquina são armazenadas em
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Variáveis por usuário são armazenadas em
HKEY_CURRENT_USER\Environment
SETX pode ser por usuário ou por máquina.
SET é temporário (durante a sessão CMD); SETX é permanente (armazenado no registro).
As variáveis definidas com SETX não estão disponíveis em nenhuma sessão CMD que estava aberta no momento em que foi definida; estará disponível em novas sessões do CMD.
Para definir uma variável 'por máquina', use a opção /M com SETX.
Exemplo de demonstração:
Digite isto como Administrador:
C:\WINDOWS\system32>setx apps %SystemDrive%\apps /m
SUCCESS: Specified value was saved.
Em seguida, abra outra janela cmd como usuário não administrador:
C:\Users\jh>echo %apps%
C:\apps
Embora "apps" abranja toda a máquina, %apps% obtém o valor para um usuário comum.
Portanto, o formato "%ABC%" obtém variáveis de usuário e de máquina.
Para limpar essa variável, como administrador, façasetx apps "" /m