Comment effacer toutes les variables d'environnement d'une session shell Windows?

12

Si je démarre une nouvelle session shell Windows et tape:

env

Je vois beaucoup de variables d'environnement définies. Je veux déboguer l'exécution d'un programme de ligne de commande en supprimant toutes les variables d'environnement de la session shell actuelle.

Je pourrais aller un par un avec l'approche suivante:

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

Cependant, existe-t-il un moyen simple de les effacer tous en une seule fois?

TiGz
la source
1
Qu'est-ce que c'est env? Je n'en ai jamais entendu parler auparavant, et cela ne fonctionne pas ici.
paradroid

Réponses:

13

Vous pouvez écrire ceci dans un fichier 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=
)

Il parcourt essentiellement chaque variable d'environnement, les sauvegarde dans un fichier de commandes ( backupenv.bat), puis efface chaque variable. Pour les restaurer, vous pouvez exécuter le backupenv.batfichier.

Gaffe
la source
C'est bien. Merci! Une petite chose: le fichier backupenv.bat semble avoir 2 espaces de fin à la fin de chaque ligne SET A = B. Cela semble bousiller certaines variables lors de la restauration.
TiGz
Suppression de l'espace après %% a = %% b, voir la réponse modifiée. Ça devrait aller maintenant.
Gaff
Cela s'est débarrassé de l'un des deux espaces ... il reste un espace à la fin de chaque ligne SET. C'est bizarre.
TiGz
Peut-être que l'espace a été ajouté à partir du moment où vous avez exécuté mon script (légèrement cassé) et que vous avez exécuté le lot pour restaurer ... ajoutant ainsi un espace à chaque variable? Ensuite, vous l'avez exécuté à nouveau et dans la sortie, il aurait deux espaces? Si tel est le cas, désolé d'avoir préalablement suffixé toutes vos variables avec un espace. Cela devrait être facile à nettoyer.
Gaff
Nah - J'ouvrais un nouveau shell à chaque fois. Essayez-le ... ne vous retrouvez-vous pas avec un espace supplémentaire?
TiGz
6

Si vous souhaitez uniquement effacer toutes les variables d'environnement pour le fichier de commandes, cela devient encore plus facile.

@echo off
Setlocal enabledelayedexpansion
Set >set

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

La dernière ligne affiche toutes les variables d'environnement, qui devraient être nulles, confirmant le code travaillé.

Parce que Setlocalest utilisé, toutes les modifications d'environnement sont perdues après la fin du lot. Donc, si vous tapez Setaprès le lot, vous verrez que toutes les variables d'environnement sont toujours là, donc pas besoin de les stocker dans un fichier de sauvegarde.

Aaron Lowe
la source
Veuillez faire un effort pour utiliser la mise en forme du code. Cela rend les choses beaucoup plus lisibles.
boxspah
la réponse acceptée est meilleure que cela car l'autre réponse a un moyen de sauvegarder l'existant
SeanClt
@SeanClt Vous devez lire mon commentaire complet. Il est dit que la sauvegarde n'est pas nécessaire dans ce cas.
Aaron Lowe
@scripthero Je ne suis actuellement pas en mesure de formater les messages, désolé
Aaron Lowe
Oui, vous avez raison
SeanClt