Risposte:
Dipende molto da come sono state impostate le variabili di ambiente. Se, ad esempio, hai utilizzato il comando "SET" nella riga di comando, ha effetto solo sull'istanza corrente. D'altra parte, comandi come "SETX" regoleranno permanentemente il valore della variabile d'ambiente. SETX assicurerà che tutte le future istanze di cmd vedranno l'aggiornamento. Non influirà sull'ambiente locale.
Se la variabile di ambiente è impostata da un'altra applicazione e non viene aggiornata, è spesso più semplice riavviare il processo "explorer.exe", disconnettersi e riconnettersi o riavviare. In sostanza, devi solo dire a Explorer di ricaricare le variabili di ambiente. Se è un'applicazione che hai sviluppato, come un programma di installazione, assicurati che stia chiamando SendMessage (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment");
. Questo dice a Explorer di aggiornare la sua cache delle variabili di ambiente.
Questo è importante perché le applicazioni avviate da un altro processo ereditano le loro variabili di ambiente dai loro genitori. Pertanto, se si avvia cmd da explorer, si ottengono le variabili quando Explorer le vede.
Impostare e recuperare l'ambiente principale in Windows è qualcosa su cui le persone BartPE hanno trascorso molto tempo.
L'ambiente principale è archiviato nel registro, ma la shell di Explorer legge questo al suo indirizzo. Da qui viene inviato a ciascuna sessione cmd.exe.
SET ha effetto solo sull'ambiente cmd. SETX consente di modificare l'ambiente principale, ma l'impostazione non si riflette nell'ambiente locale.
CONSET e 4NT di Frank Westlake possono recuperare le voci dal registro, ma in particolare non ci sono opzioni per l'ambiente principale.
Windows normalmente caricato tiene traccia delle impostazioni nel registro, mentre quello caricato tramite minint (cioè WinPE) no. Quindi l'impostazione del registro e la lettura del registro funzionano in entrambi, ma solo le finestre normalmente avviate vedranno le impostazioni e le passeranno a un nuovo programma exe cmd.
dipende da dove "imposti" le variabili di ambiente. l'equivalente del tuo esempio bash sarebbe così:
file: env.bat
set FOO=bar
e ora lo aggiorni
% call env.bat
ma penso che tu l'abbia fatto tramite il windows-system-settings-dialog (o qualunque sia il suo nome). il risultato è che hai effettivamente modificato il registro. queste impostazioni del registro sono associate al processo quando si avvia un nuovo processo.
quindi, puoi avviare un nuovo processo (cmd.exe nel tuo caso) O puoi leggere le chiavi di registro che riflettono le modifiche che desideri. potresti anche scrivere un piccolo script .bat / .cmd che recupera l'ambiente dal registro e cambia la accordlingy dell'ambiente attuale (se l'umore mi colpisce lo farò dopo pranzo).
Questo è ora molto più semplice, non è necessario riavviare la shell:
RefreshEnv.bat
RefreshEnv.bat
Si noti che le variabili di ambiente appena aggiunte sono disponibili in qualsiasi nuova istanza Command / Powershell, verificando l'aggiornamento.