Como listar variáveis ​​de ambiente global separadamente das variáveis ​​de ambiente específicas do usuário?

13

No Windows (por exemplo, versão 10), você pode listar variáveis ​​de ambiente usando o comando

set

Como você lista apenas as variáveis ​​de ambiente que são iguais para todos os usuários ou apenas as variáveis ​​de ambiente que são para o usuário ou sessão atual?

RedGrittyBrick
fonte

Respostas:

17

As coisas são um pouco mais complicadas do que a Microsoft às vezes faz parecer.

Muitas variáveis ​​de ambiente são armazenadas no Registro. Isso significa que você pode consultá-los usando o regcomando

Comum a todos os usuários

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"

Específico para a sessão do usuário atual

reg query HKCU\Environment
reg query "HKCU\Volatile Environment"

Definido pelo usuário

Se você definir permanentemente sua própria variável de ambiente usando o setx variable valuecomando, ela será armazenada no registro, mas não disponibilizada imediatamente.

C:\>setx test removeme

SUCCESS: Specified value was saved.

C:\>reg query "HKCU\Environment"

HKEY_CURRENT_USER\Environment
    Path    REG_EXPAND_SZ    %USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
    TEMP    REG_EXPAND_SZ    %USERPROFILE%\AppData\Local\Temp
    TMP    REG_EXPAND_SZ    %USERPROFILE%\AppData\Local\Temp
    test    REG_SZ    removeme

Se você usar o set variable=valuecomando, a variável estará disponível imediatamente, mas não será armazenada no registro. Você não pode usar o regcomando para listá-los, embora eles sejam mostrados por set. Essas variáveis ​​de ambiente temporárias não persistem após o término da sessão do prompt de comando.

Variáveis ​​de ambiente dinâmicas

Existem construções que agem como variáveis ​​de ambiente que não são armazenadas no registro dessa maneira. Por exemplo:

echo %TIME%
RedGrittyBrick
fonte
1
Apenas uma curiosidade: é possível atualizar a variável adicionada anteriormente ao registro? por exemplo setx test removeme, algo set test %test%para que você possa ter todas as variáveis ​​listadas com um simples set? Eu estava pensando que é possível implementar um script de comando / lote para torná-los todos explícita mediante solicitação ...
Hastur
@ Hastur: Sim, isso funcionaria para tornar uma nova variável imediatamente disponível e persistente.
RedGrittyBrick
@hastur @RedGrittyBrick - é possível, mas definitivamente não é um oneliner no cmd do Windows. Se você instalar achocolatada tem refreshenv.cmdutilidade que é de 10 linhas de código e, basicamente, ele consulta e refresca entradas de registro
maoizm
O SETcomando mostra variáveis ​​de ambiente dinâmicas? Estou tentando encontrar tudo e qualquer coisa que as Ferramentas de compilação da Microsoft definiram durante uma sessão, só quero cobrir minhas bases.
Ungeheuer
1

Para saída limpa, sem linhas extras e espaços em preto, use os seguintes comandos em cmd.exe:

Variáveis ​​de ambiente do usuário:

FOR /F "tokens=1,3* skip=2" %G IN ('reg query HKCU\Environment') DO @echo %G=%H %I

Variáveis ​​de ambiente globais (do sistema):

FOR /F "tokens=1,3* skip=2" %G IN ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"') DO @echo %G=%H %I

Funciona no Windows 7-10 e, provavelmente, em versões anteriores.

maoizm
fonte
Obrigado por isso. Observe que ele solta parte do valor se tiver espaços. Portanto, uma entrada do registro VS140COMNTOOLS REG_SZ C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools aparece como justa VS140COMNTOOLS=C:\Program.
metal
@metal obrigado por relatar este caso de canto. Sinta-se livre para editar a resposta se você encontrar solução para espaços - Eu não tenho quaisquer computadores com Windows agora
maoizm
Enviei uma atualização para esse efeito. Você ou algum mod precisará aprová-lo.
de metal
1

digite o comando em lote: echo% temp%

Se a variável de ambiente "temp" contiver "H: \ Users \ amacm \ AppData \ Local", o Windows responderá imediatamente com o seguinte:

H: \ Usuários \ amacm \ AppData \ Local

Se não houver variável de ambiente chamada "temp", o Windows responderá com o seguinte:

% temp%

Art McDonald
fonte