如何取消定义MS-DOS变量?

时间:2011-08-28 07:46:15

标签: windows batch-file cmd

假设我在CMD shell中执行以下命令:

set FOO=bar

除了回收CMD shell之外,有没有办法取消定义这个变量?

5 个答案:

答案 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