97 votes

Comment supprimer une variable cmd ?

Disons que j'éxecute la commande suivante dans l'invite de commande CMD :

SET "FOO=bar"

Y a-t-il un moyen de définir cette variable, autre que de redémarrer l'invite de commande CMD ?

10 votes

Voulez-vous dire vraiment MS-DOS (qui est mort depuis au moins une dizaine d'années) - ou est-ce que vous dites MS-DOS mais vous voulez vraiment dire l'invite de commande de Windows (cmd.exe) ??

5 votes

Probable, mais cela n'a pas vraiment d'importance pour cette question...

4 votes

Marc a raison. Ce n'est pas l'invite de commande MS-DOS. Les gens ne comprennent jamais que c'est une grande différence.

146voto

Second Rikudo Points 59550

Oui, vous pouvez le désactiver avec

set FOO=

Ou en utilisant explicitement:

set "FOO="

Assurez-vous qu'aucun caractère supplémentaire (invisible) ne suive le signe =. C'est-à-dire:

  • set FOO= est différent de set FOO= .

0 votes

Pour moi, ça a fonctionné ainsi : $Env:FOO = ""

1 votes

@BugsForBreakfast C'est la bonne commande en PowerShell, set FOO est pour cmd.

33voto

jeb Points 26035

Une façon sécurisée de supprimer la variable est d'utiliser également des guillemets, alors il n'y a pas de problèmes avec les espaces de fin.

set FOO=bar
echo %FOO%
set "FOO=" le texte après la dernière guillemet est ignoré
echo %FOO%

12voto

walid2mi Points 1222

Un autre méthode

@Echo oFF

setlocal
set FOO=bar
echo %FOO%
endlocal

echo %FOO%

pause

Note : Cela ne fonctionnerait pas sur un invite de commande interactif. Mais fonctionne dans un script batch.

10voto

Pekka 웃 Points 249607

Cela fonctionne pour moi dans mon shell CMD Windows 7 :

set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // vide; appeler "set" ne l'affiche plus

2 votes

Les espaces sont significatifs dans la commande set. Si vous essayez set FOO = bar puis essayez set FOO=, cela ne désactivera pas 'FOO '. Pour une raison inconnue, cependant, ils ne sont pas aussi significatifs à l'intérieur de % %.

0 votes

L'espace final est également important. Désolé pour la modification, je pensais que votre rep disait 270, pas 270k... oups. Je modifie souvent les réponses lorsque le rep suggère que l'utilisateur ne reviendra pas. Visiblement, ce n'est pas le cas ici. Mon erreur.

0 votes

@chappjs pas de problème, merci pour la correction! Je ne suis pas sûr comment j'ai pu passer à côté.

4voto

user1167442 Points 676

Je proposerais ce qui suit uniquement comme un commentaire, mais je pense que c'est suffisamment important pour être mis en valeur.

Beaucoup des réponses précédentes ont mentionné qu'il faut se méfier des espaces de fin; et c'est certainement vrai. Cependant, j'ai trouvé que parfois les espaces de fin veulent simplement être là peu importe quoi - particulièrement si vous utilisez une seule ligne de commande et avez besoin de l'espace comme séparateur de commande.

Voici la solution à ce problème:

SET FOO=Bar
echo %FOO%
:: affiche Bar
SET "FOO="
echo %FOO%
:: affiche %FOO%

En enveloppant la déclaration de cette façon avec des guillemets, le problème d'espacement peut être complètement évité. Cela peut également être vraiment utile lorsque des variables sont créées en les concaténant pour éliminer les espaces entre elles - par exemple - des chemins, par exemple:

SET A=c:\users\ && SET D=Daniel
SET P="%a%%d%"
ECHO %P%
:: affiche "C:\Users\ Daniel"
:: Remarquez l'espace indésirable là

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X