假设我在CMD shell中执行以下命令:
set FOO=bar
除了回收CMD shell之外,有没有办法取消定义这个变量?
答案 0 :(得分:108)
是的,您可以使用
取消设置set FOO=
或明确使用:
set "FOO="
确保=
符号后面没有尾随无关(不可见)字符。那就是:
set FOO=
与set FOO=
不同。答案 1 :(得分:26)
取消设置变量的安全方法是使用引号,然后尾随空格没有问题。
set FOO=bar
echo %FOO%
set "FOO=" text after the last quote is ignored
echo %FOO%
答案 2 :(得分:9)
另一种方法
@Echo oFF
setlocal
set FOO=bar
echo %FOO%
endlocal
echo %FOO%
pause
注意:这不适用于交互式命令提示符。但是以批处理脚本工作。
答案 3 :(得分:7)
这适用于我的Windows 7 CMD shell:
set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
答案 4 :(得分:3)
我只会将以下内容作为评论,但我认为它非常重要,可以自立。
许多先前的答案提到人们需要提防尾随空格;并且肯定这是真的。但是我发现有时尾随空格只是想进入那里 - 特别是如果你正在使用命令行单行并且需要空格作为命令分隔符。
这是解决该问题的方法:
SET FOO=Bar
echo %FOO%
:: outputs Bar
SET "FOO="
echo %FOO%
:: outputs %FOO%
通过这种方式用双引号包装声明,可以完全避免间距问题。当通过连接创建变量以消除其间的空间(例如路径)时,这也非常有用,例如:
SET A=c:\users\ && SET D=Daniel
SET P="%a%%d%"
ECHO %P%
:: outputs "C:\Users\ Daniel"
:: Notice the undesirable space there