Valuta% PATH% esclusivamente come variabile di ambiente dell'ambito del sistema


2

Nella riga di comando di Windows, echo %PATH%sembra unire il sistema e le variabili utente PATHin tale ordine prima di stampare. Sembra ragionevole, ma vorrei anche poter stampare solo la variabile di sistema (o, in alternativa, solo la variabile utente).
Nota che echoè solo un esempio, mi aspetto che funzioni con qualsiasi altro comando.

Si può facilmente impostare usando (o no) il /Mflag quando si emette il SETXcomando:

SETX PATH "D:\some\user\path"
^ sets the user variable PATH
SETX PATH "C:\some\system\path" /M
^ sets the system-wide variable PATH

Ma valutare %PATH% in questo modo non sembra così semplice (o addirittura possibile). Digitando semplicemente i %PATH%risultati in:

C:\some\system\path;D:\some\user\path

Sarebbe possibile recuperare solo C:\some\system\path(o solo D:\some\user\path)?

Sono a conoscenza dell'esistenza di un'interfaccia GUI che consente di distinguere facilmente tra i due. Tuttavia, mi piacerebbe realizzare questo compito usando solo la riga di comando.

Risposte:


2

Puoi sempre interrogare direttamente i valori del registro:

for /f "skip=2 tokens=2*" %a in ('reg query HKCU\Environment /v PATH') do @echo %b

for /f "skip=2 tokens=2*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PATH') do @echo %b

1
for /f "tokens=2*" %a in ('reg query HKCU\Environment /v PATH 2^>NUL') do @echo %bper evitare ERRORE: il sistema non è stato in grado di trovare la chiave o il valore di registro specificati (nota 2^>NUL). Inoltre, potrebbe essere rimosso skip=2poiché è sovrabbondante per questo caso (ma comunque importante per la HKLMquery)
JosefZ,

1
@JosefZ: Sì, ho esaminato il caso in cui non esiste alcun valore Path dell'utente. Invece di deviarlo a NUL, si può anche facilmente verificare l'errore restituito e diramarsi di conseguenza in un file batch. Inoltre, quando esiste il percorso utente, skip=2è necessario ottenere solo il valore senza nulla in più.
Karan,

1
for /f "tokens=2*" %a in ('reg query HKCU\Environment /v TEMP') do @echo "%b"restituisce l'unico (e giusto) valore in quanto non vi è alcun secondo token nelle prime due righe. Certo, potrebbe skip=2
trattarsi di

1
@JosefZ: "restituisce il solo (e giusto) valore in quanto non c'è il 2 ° token nelle prime due righe" - Ah sì, hai assolutamente ragione. Tuttavia, preferisco saltare completamente le linee non necessarie, quindi non c'è alcuna ambiguità sulla linea da cui voglio iniziare l'elaborazione.
Karan,

Funziona perfettamente. Ma dal momento che è un po 'complicato di digitare ogni volta che avrei avuto bisogno di esso, ho deciso di avvolgere il comando in una variabile d'ambiente personalizzato: setx syspathdo "for /f \"skip=2 tokens=2*\" %a in ('reg query \"HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\" /v PATH') do @". Ora posso semplicemente rilasciare %syspathdo% echo %b. Il mio obiettivo finale è stato quello di essere in grado di estendere il percorso di sistema, mantenendo il percorso utente sempre alla fine, ora è facile: %syspathdo% setx PATH "%b;C:\some\new\path" /m. Molte grazie!
rinoceronte
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.