如何取消定义一个MS-DOSvariables?

比方说,我在CMDshell中执行以下内容:

set FOO=bar 

有没有一种方法来取消定义这个variables,除了回收CMDshell?

是的,你可以用它来解除它

 set FOO= 

重要说明 :确保在=后面没有尾随的空格/其他不可见字符。 set FOO= != set FOO=

一个安全的方法来取消variables是也使用引号,那么尾部空格没有问题。

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

另一种方法

 @Echo oFF setlocal set FOO=bar echo %FOO% endlocal echo %FOO% pause 

注意:这在交互式命令提示符下不起作用。 但在批处理脚本中工作。

这适用于我在我的Windows 7 CMDshell:

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

我只提供以下内容作为评论,但是我认为这足够重要。

很多以前的答案都提到,需要提防尾随空间; 当然,这是真的。 不过,我发现有时候尾随的空格只是想进入那里 – 特别是如果你正在做一个命令行,需要空间作为命令分隔符。

这是解决这个问题的方法:

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

通过用双引号包装声明,间距问题可以完全避免。 当通过连接来创buildvariables以消除两者之间的空格时,这也非常有用 – 例如 – path,例如:

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