Come elencare le variabili di ambiente globali separatamente dalle variabili di ambiente specifiche dell'utente?


13

In Windows (ad es. Versione 10) è possibile elencare le variabili di ambiente usando il comando

set

Come si elencano solo le variabili di ambiente uguali per tutti gli utenti o solo le variabili di ambiente per l'utente o la sessione corrente?

Risposte:


17

Le cose sono un po 'più complicate di quanto a volte Microsoft sembri.

Molte variabili di ambiente sono memorizzate nel registro. Questo significa che puoi interrogarli usando il regcomando

Comune a tutti gli utenti

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

Specifico per la sessione utente corrente

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

Impostato dall'utente

Se si imposta in modo permanente la propria variabile di ambiente utilizzando il setx variable valuecomando, viene memorizzata nel registro ma non immediatamente disponibile.

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 si utilizza il set variable=valuecomando, la variabile è immediatamente disponibile ma non è memorizzata nel registro. Non è possibile utilizzare il regcomando per elencarli sebbene siano mostrati da set. Queste variabili di ambiente temporanee non persistono dopo aver terminato la sessione del prompt dei comandi.

Variabili di ambiente dinamico

Esistono costrutti che agiscono come variabili d'ambiente che non sono archiviate nel registro in questo modo. Per esempio:

echo %TIME%

1
Solo una curiosità: è possibile aggiornare la variabile precedentemente aggiunta al registro? ad esempio setx test removemequalcosa in set test %test%modo da poter avere tutte le variabili elencate con un semplice set? Pensavo che fosse possibile implementare uno script di comando / batch per renderli espliciti su richiesta ...
Hastur,

@Hastur: Sì, funzionerebbe per rendere una nuova variabile sia immediatamente disponibile che persistente.
RedGrittyBrick

@hastur @RedGrittyBrick - è possibile ma sicuramente non è un oneliner in Windows cmd. Se installi chocolatey ha refreshenv.cmdun'utilità che è di 10 righe di codice e fondamentalmente interroga e aggiorna le voci di registro
maoizm

Il SETcomando mostra Variabili di ambiente dinamiche? Sto cercando di trovare qualsiasi cosa impostata da Microsoft Build Tools durante una sessione, voglio solo coprire le mie basi.
Ungeheuer,

2

Per un output pulito senza linee extra e spazi neri utilizzare i seguenti comandi in cmd.exe:

Variabili di ambiente dell'utente:

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

Variabili d'ambiente globali (di sistema):

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

Funziona in Windows 7-10 e molto probabilmente anche nelle versioni precedenti.


Grazie per questo. Nota che rilascia parte del valore se contiene spazi. Quindi una voce di registro come quella VS140COMNTOOLS REG_SZ C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools appare come giusta VS140COMNTOOLS=C:\Program.
metallo

@metal grazie per aver segnalato questo caso d'angolo. Sentiti libero di modificare la risposta se trovi una soluzione alternativa per gli spazi - Non ho nessun computer Windows ora
maoizm

Ho inviato un aggiornamento in tal senso. Tu o qualche mod dovrete approvarlo.
metallo

1

digitare il comando batch: echo% temp%

Se la variabile di ambiente "temp" contiene "H: \ Users \ amacm \ AppData \ Local", Windows risponderà immediatamente con quanto segue:

H: \ Users \ amacm \ AppData \ Local

Se non esiste una variabile di ambiente denominata "temp", Windows risponderà con il seguente:

% Temp%

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.