Disons que j'exécute ce qui suit dans le shell CMD:
set FOO=bar
Existe-t-il un moyen d'annuler la définition de cette variable, autre que de recycler le shell CMD?
Disons que j'exécute ce qui suit dans le shell CMD:
set FOO=bar
Existe-t-il un moyen d'annuler la définition de cette variable, autre que de recycler le shell CMD?
set var=
réponse fonctionne sous MS-DOS 6.22 command.com de la même manière que sous Windows cmd.exe. (Cependant, contrairement à Windows, mettre des guillemets doubles autour de var = ne fonctionne pas, mais crée une variable d'environnement dont le nom commence par un guillemet double.)
Réponses:
Oui, vous pouvez le désactiver avec
set FOO=
Ou en utilisant explicitement:
set "FOO="
Assurez-vous qu'aucun caractère superflu (invisible) de fin ne vient après le =
signe. C'est:
set FOO=
est différent de set FOO=
.Cela fonctionne pour moi dans mon shell Windows 7 CMD:
set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
set
commande. Si vous essayez set FOO = bar
puis essayez set FOO=
, cela ne désactive pas «FOO». Pour une raison quelconque, cependant, ils ne sont pas (aussi?) Significatifs à l'intérieur % %
.
Je proposerais ce qui suit uniquement à titre de commentaire, mais je pense que c'est suffisamment important pour être autonome.
Beaucoup de réponses précédentes mentionnaient qu'il fallait se méfier des espaces de fin; et c'est sûr que c'est vrai. Cependant, j'ai trouvé que parfois les espaces de fin veulent juste y entrer quoi qu'il arrive - en particulier si vous faites une ligne de commande à une ligne et avez besoin de l'espace comme séparateur de commandes.
Voici la solution à ce problème:
SET FOO=Bar
echo %FOO%
:: outputs Bar
SET "FOO="
echo %FOO%
:: outputs %FOO%
En entourant la déclaration de guillemets doubles de cette façon, le problème d'espacement peut être entièrement évité. Cela peut également être très utile lorsque des variables sont créées par concaténation pour éliminer les espaces entre - par exemple - des 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
cmd.exe
)?