Impostazione o modifica di una variabile di ambiente (a livello di sistema) in cmd.exe


13

Sto cercando un modo conveniente per aggiungere e / o modificare e / o eliminare una variabile di ambiente dalla riga di comando. In particolare, mi trovo a volte in situazioni in cui devo aggiungere alcune variabili in cmd.exe.

Le sarei grato se qualcuno mi mostrasse un modo non GUI per modificare (cioè aggiungere una nuova directory) alla %PATH%variabile.

Il cambiamento dovrebbe essere permanente, non solo per la durata della cmdsessione.


1
Credo che uno dei problemi che troverete è che la maggior parte le modifiche ai permanenti , a livello di sistema le variabili di ambiente richiedono un logout / login (o riavviare) per la sessione dell'utente di utilizzare i valori modificati.
Quack Quixote

Risposte:


8

Il metodo Old School di manipolare direttamente le variabili di registro con il comando reg era basato sul denaro. Ecco come lo fai:

reg add HKCU\Environment /v PATH /d "%addonpath%;%path%" /f

Buttalo in uno script di una riga chiamato apath.bat che assomigli a questo:

@echo off
reg add HKCU\Environment /v PATH /d "%~dp0;%path%" /f

Quindi, tutto ciò che devi fornire è il percorso della nuova directory che stai aggiungendo quando chiami lo script e sei connesso:

ad esempio: apath.bat% addonpath%

Anche se Hinch ha ragione. Il modo migliore per farlo se stai usando Vista o superiore è usare il comando SETX che è progettato per permetterci di propagare le variabili di ambiente senza il rischio di manipolare direttamente il registro con il comando reg che potrebbe salvare la tua macchina se manipoli abbastanza variabili ENV da usarlo al volo.


Questo comando richiede un riavvio?
Juzer Ali,

No, ma devi usare un nuovo processo (cmd).
Mike

1
Per me, è necessario riavviare? perché? Sono su Windows XP, sp3.
Changwang Zhang,

15

Puoi usare setx.

Variabile utente:

SETX PATH "%PATH%;C:\MyDir"

Variabile di sistema:

SETX PATH "%PATH%;C:\MyDir" /M

Credo che SETX sia disponibile da Vista, ma sono su XP.
René Nyffenegger,

potresti riuscire a scappare copiando setx.exe da un computer Vista. probabilmente non funzionerà, ma potrebbe.
Quack Quixote

2
SETX fa parte degli Strumenti risorse per Windows Server 2003. Puoi semplicemente aggiungerlo alla tua directory system32 o qualsiasi altro percorso aggiunto (pollo-uovo!).
paradroid

Ho bisogno della parte / M in modo da poter modificare la variabile di sistema, non quella dell'utente. Grazie!
Andrei Sfat,

Entrambi i comandi specificati sono errati. Perché? Windows mantiene effettivamente due valori PATH: a livello di sistema e per utente. Quando digiti echo %PATH%, li vedi combinati insieme, come <system path>;<user path>. Pertanto, il primo comando forzerà la visualizzazione degli elementi correnti del percorso del sistema nel percorso dell'utente (che non è poi così male), mentre il secondo comando farà apparire gli elementi correnti del percorso dell'utente nel percorso del sistema (che è inaccettabile).
Sasha,

1

È possibile utilizzare la HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorunchiave del Registro di sistema per puntare a un file batch, per consentire di apportare modifiche semi-permanenti senza approfondire le finestre di dialogo delle impostazioni arcane.


Per quanto ne so, ciò influenzerebbe solo le successive invocazioni di cmd.exe (senza il flag / d), ma non l'intero sistema o altri processi (successivamente invocati).
René Nyffenegger,

È corretto. Trovo che sia un vantaggio, significa che puoi fare di più senza preoccuparti di diversi processi che non sanno cosa fare. Funzionerà comunque in qualsiasi prompt interattivo, il che è sempre bello: P
Phoshi

1

Se non si desidera utilizzare la GUI (come in Pannello di controllo, Sistema, Avanzate, Variabili d'ambiente, PERCORSO) è possibile utilizzare probabilmente REGper impostare HKCU\Environment\PATH.

  • aggiornare %PATH%
  • REG ADD HKCU\Environment /v PATH /t REG\_EXPAND\_SZ /d "%PATH%" /f

Il /f forze sovrascrivono il valore esistente in modo da non dover rispondere in modo interattivo alla domanda.

Modificare: %PATH% deve essere citato.

Modifica: vale anche la pena notare che questo probabilmente richiede un riavvio o un nuovo accesso prima che abbia effetto. Mentre la modifica nella GUI ha effetto immediato (per i nuovicmd.exe sessioni).

Riferimento: http://support.microsoft.com/kb/104011

Come indicato nel riferimento, se si desidera scrivere del codice, è possibile inviare WM_SETTINGCHANGE e ciò dovrebbe evitare il requisito di accesso / disconnessione.


sarebbe molto utile. Ma, se eseguo una query su quella variabile, non restituisce nulla.
PA.

Hrm. Su XP Pro SP3 English Io ottenere il mio PATH con: REG QUERY HKCU\Environment /v PATH.
opello,

è un percorso specifico dell'utente, non il percorso dell'intero sistema. non sono sicuro di dove si vive. possono essere impostati sulla stessa cosa ma di solito contengono elementi separati (e il tuo percorso di lavoro è una fusione dei due).
Quack Quixote

Bene, è in HKCU. L'articolo di Microsoft KB collegato ha entrambe le posizioni del registro.
opello,

1
Questo è quasi quello che sto cercando ... se ci fosse un modo per inviare anche WM_SETTINGCHANGE da cmd.exe.
René Nyffenegger,

0

È facile cambiare il percorso nel processo cmd.exe corrente:

PATH c:\MyNewDirectory;%PATH%

Puoi sempre fare HELP PATH per ricevere aiuto sul comando PATH.


1
Non va bene solo per la sessione?
JL.

sì, questo non persiste per tutte le sessioni.
John T,

JL ha ragione e stavo cercando una soluzione permanente. Ho modificato la mia domanda di conseguenza.
René Nyffenegger,

0

Per modifiche veramente permanenti a livello di sistema, si desidera utilizzare il pannello di controllo del sistema (ovvero Risorse del computer -> Proprietà -> Avanzate -> Variabili d'ambiente, per WinXP). Le impostazioni lì riguardano l'intero sistema, compresi i programmi della GUI nella shell Explorer.

Se sono necessarie solo queste modifiche nella cmd.exeshell, è possibile eseguire un file batch che le imposta ogni volta che si avvia una finestra cmd.exe. La risposta di Phoshi menziona la HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun, che sembra un'opzione eccellente: è facile apportare piccole modifiche e rieseguire dalla riga di comando se necessario. Ma ciò non influirà sulle finestre della GUI o sulla shell Explorer.

In realtà sono sorpreso che Sysinternals non abbia un'utilità capace per farlo. Forse un altro dei PStools può farlo?


0

Ci sono molti modi per farlo. REG ADD è uno o REG IMPORT (utilizzando un file .REG esportato da un altro computer). SETX / M è un altro. Puoi anche inviarlo utilizzando le Preferenze di Criteri di gruppo (il modo più semplice per un gran numero di computer)


0

Un altro pensiero non menzionato qui, crea uno script autohotkey che avvierà il pannello di controllo e lo inserirà per te. Funziona bene se sei già un utente AHK :-)

https://autohotkey.com/board/topic/63210-modify-system-path-gui/

E che dire della modifica di hklm / system / currentcontrolset001 / control / session manager / environment: chiave di percorso? Ma la stessa chiave è in hklm / system / currentcontrolset002 e hklm / system / currentcontrolset. Sembra che questo potrebbe essere corretto, per qui: /programming/3304463/how-do-i-modify-the-path-environment-variable-when-running-an-inno-setup-install

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.