Come posso cancellare tutte le variabili di ambiente da una sessione della shell di Windows?


12

Se inizio una nuova sessione della shell di Windows e digito:

env

Vedo un sacco di variabili d'ambiente impostate. Voglio eseguire il debug dell'esecuzione di un programma da riga di comando rimuovendo tutte le variabili di ambiente dalla sessione di shell corrente.

Potrei andare uno ad uno con il seguente approccio:

SET FOO=
SET BAR=
SET ... ... ...

Tuttavia, esiste un modo semplice per eliminarli tutti in una volta sola?


1
Che cosa è env? Non ne ho mai sentito parlare prima, e non funziona qui.
paradroid

Risposte:


13

Puoi scrivere questo in un file batch:

@echo off
if exist ".\backupenv.bat" del ".\backupenv.bat"
for /f "tokens=1* delims==" %%a in ('set') do (
echo set %%a=%%b>> .\backupenv.bat
set %%a=
)

Esegue sostanzialmente tutte le variabili di ambiente, esegue il backup in un file batch ( backupenv.bat) e quindi cancella ogni variabile. Per ripristinarli è possibile eseguire il backupenv.batfile.


Questo è fantastico Grazie! Una piccola cosa: il file backupenv.bat sembra avere 2 spazi finali alla fine di ogni riga SET A = B. Questo sembra rovinare alcune variabili al ripristino.
TiGz,

Rimosso lo spazio che segue %% a = %% b, vedi la risposta modificata. Ora dovrebbe andare bene.
Gaff,

Che si è sbarazzato di uno dei due spazi ... uno spazio rimane alla fine di ogni riga SET. Il che è strano.
TiGz,

Forse lo spazio è stato aggiunto da quando in precedenza hai eseguito il mio script (leggermente rotto) e hai eseguito il batch per ripristinare ... aggiungendo così uno spazio a ciascuna variabile? Quindi l'hai eseguito di nuovo e nell'output avrebbe due spazi? In questo caso, scusatemi per aver precedentemente aggiunto tutte le variabili con uno spazio. Dovrebbe essere facile da pulire però.
Gaff,

Nah - Stavo aprendo una nuova shell ogni volta. Provalo ... non finisci con uno spazio extra?
TiGz,

6

Se si desidera solo cancellare tutte le variabili di ambiente per il file batch, diventa ancora più semplice.

@echo off
Setlocal enabledelayedexpansion
Set >set

For /F "tokens=1* delims==" %%i in (set) do set %% %i=
Del set
Set

La riga finale genera tutte le variabili di ambiente, che dovrebbero essere nessuna, confermando che il codice ha funzionato.

Poiché Setlocalviene utilizzato, tutte le modifiche all'ambiente vengono perse al termine del batch. Quindi, se digiti Setdopo il batch, vedrai che tutte le variabili di ambiente sono ancora lì, quindi non è necessario memorizzarlo in un file di backup.


Si prega di fare qualche sforzo per usare la formattazione del codice. Rende le cose molto più leggibili.
boxspah,

la risposta accettata è meglio di così poiché l'altra risposta ha un modo per eseguire il backup esistente
SeanClt

@SeanClt Devi leggere il mio commento completo. Si dice che in questo caso non è necessario il backup.
Aaron Lowe,

@scripthero Al momento non sono in grado di formattare i post, mi dispiace
Aaron Lowe,

Sì hai ragione
SeanClt
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.