Wie lösche ich alle Umgebungsvariablen aus einer Windows-Shell-Sitzung?

12

Wenn ich eine neue Windows-Shell-Sitzung starte und tippe:

env

Ich sehe viele Umgebungsvariablen gesetzt. Ich möchte die Ausführung eines Befehlszeilenprogramms debuggen, indem ich alle Umgebungsvariablen aus der aktuellen Shell-Sitzung entferne .

Ich könnte einen nach dem anderen mit folgendem Ansatz durchgehen:

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

Gibt es jedoch eine einfache Möglichkeit, sie alle auf einmal zu löschen?

TiGz
quelle
1
Was ist env? Davon habe ich noch nie gehört, und hier funktioniert es nicht.
Paradroid

Antworten:

13

Sie können dies in eine Batch-Datei schreiben:

@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=
)

Grundsätzlich werden alle Umgebungsvariablen durchlaufen, in einer Batch-Datei ( backupenv.bat) gesichert und anschließend alle Variablen gelöscht. Um sie wiederherzustellen, können Sie die backupenv.batDatei ausführen .

Gaff
quelle
Das ist toll. Vielen Dank! Eine kleine Sache: Die Datei backupenv.bat scheint am Ende jeder SET A = B-Zeile zwei nachgestellte Leerzeichen zu haben. Dies scheint einige Variablen beim Wiederherstellen zu vermasseln.
TiGz
Das Leerzeichen nach %% a = %% b wurde entfernt, siehe bearbeitete Antwort. Sollte jetzt gut sein.
Gaff
Damit ist eines der beiden Leerzeichen beseitigt ... ein Leerzeichen bleibt am Ende jeder SET-Zeile. Welches ist komisch.
TiGz
Vielleicht wurde der Speicherplatz hinzugefügt, als Sie zuvor mein (leicht beschädigtes) Skript ausgeführt haben, und Sie haben den wiederherzustellenden Stapel ausgeführt. Fügen Sie also jeder Variablen einen Speicherplatz hinzu? Dann hast du es nochmal ausgeführt und in der Ausgabe hätte es zwei Leerzeichen? Wenn dies der Fall ist, bedauern Sie, dass Sie zuvor alle Variablen mit einem Leerzeichen versehen haben. Sollte aber leicht zu säubern sein.
Gaff
Nein, ich habe jedes Mal eine neue Shell geöffnet. Probieren Sie es aus ... haben Sie nicht mehr Platz?
TiGz
6

Wenn Sie nur alle Umgebungsvariablen für die Batch-Datei löschen möchten, wird dies noch einfacher.

@echo off
Setlocal enabledelayedexpansion
Set >set

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

Die letzte Zeile gibt alle Umgebungsvariablen aus, die keine sein sollten, und bestätigt, dass der Code funktioniert hat.

Da Setlocalverwendet wird, gehen alle Umgebungsänderungen verloren, nachdem der Stapel beendet wurde. Wenn Sie also Setnach dem Batch tippen , sehen Sie, dass alle Umgebungsvariablen noch vorhanden sind, sodass Sie sie nicht in einer Sicherungsdatei speichern müssen.

Aaron Lowe
quelle
Bitte bemühen Sie sich, die Code-Formatierung zu verwenden. Es macht die Dinge viel lesbarer.
Boxspah
Die akzeptierte Antwort ist besser als diese, da die andere Antwort eine Möglichkeit zum Sichern der vorhandenen hat
SeanClt
@ SeanClt Sie müssen meinen vollständigen Kommentar lesen. In diesem Fall wird kein Backup benötigt.
Aaron Lowe
@scripthero Ich kann derzeit leider keine Beiträge formatieren
Aaron Lowe
Ja, Sie haben Recht
SeanClt