web-dev-qa-db-fra.com

Comment annuler une variable MS-DOS?

Disons que j'exécute ce qui suit dans le shell CMD:

set FOO=bar

Existe-t-il un moyen de définir cette variable autrement que de recycler la coquille CMD?

77
user288004

Oui, vous pouvez le désactiver avec

set FOO=

Ou explicitement en utilisant:

set "FOO="

Assurez-vous qu’aucun caractère de fin (invisible) ne vient après le = signe. C'est:

  • set FOO= est différent de set FOO=      .
118
Madara Uchiha

Un moyen sûr de dé-définir la variable consiste à utiliser également des guillemets. Les espaces de fin ne posent aucun problème.

set FOO=bar
echo %FOO%
set "FOO=" text after the last quote is ignored
echo %FOO%
27
jeb

une autre méthode

@Echo oFF

setlocal
set FOO=bar
echo %FOO%
endlocal

echo %FOO%

pause

Remarque: cela ne fonctionnerait pas avec une invite de commande interactive. Mais fonctionne en script batch.

9
walid2mi

Cela fonctionne pour moi dans mon shell CMD Windows 7:

set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
7
Pekka 웃

J'offrirais ce qui suit à titre de commentaire, mais je pense que c'est assez important pour être autonome.

Un grand nombre des réponses précédentes indiquaient qu'il fallait se méfier des espaces de fuite; et c'est sûr que c'est vrai. Cependant, j’ai constaté que, parfois, les espaces en fin de texte ne voulaient que pénétrer dedans, peu importe les circonstances, surtout si vous exécutez une ligne de commande en une ligne et que vous avez besoin de cet espace en tant que séparateur de commandes.

C'est la solution à ce problème:

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

En mettant ainsi la déclaration entre guillemets doubles, le problème d'espacement peut être entièrement évité. Cela peut aussi être vraiment utile lorsque des variables sont créées en concaténant pour éliminer les espaces entre, par exemple, les chemins, par exemple:

SET A=c:\users\ && SET D=Daniel
SET P="%a%%d%"
ECHO %P%
:: outputs "C:\Users\ Daniel"
:: Notice the undesirable space there
3
dgo