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?
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=
.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%
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.
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
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