假设我在CMD shell中执行以下命令:
SET "FOO=bar"
除了重新启动CMD shell,还有没有其他方法可以取消定义这个变量呢?
假设我在CMD shell中执行以下命令:
SET "FOO=bar"
除了重新启动CMD shell,还有没有其他方法可以取消定义这个变量呢?
是的,你可以使用以下代码取消设置:
set FOO=
或者明确地使用:
set "FOO="
确保在等号=
符号后面没有任何多余的(不可见)字符。即:
set FOO=
与set FOO=
是不同的。set FOO
是针对 cmd
的。 - acl安全地取消变量的方法是同时使用引号,这样就不会出现尾随空格的问题。
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
注意:此方法无法在交互式命令提示符上运行,但可以在批处理脚本中运行。
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%
通过用双引号包装声明,可以完全避免间距问题。当变量通过连接来创建以消除之间的空格时,这也非常有用,例如路径,例如:
SET A=c:\users\ && SET D=Daniel
SET P="%a%%d%"
ECHO %P%
:: outputs "C:\Users\ Daniel"
:: Notice the undesirable space there
cmd.exe
)? - marc_sset var=
答案在MS-DOS 6.22 command.com下与Windows cmd.exe下的效果相同。(但是,与Windows不同的是,在var=周围放置双引号无效,而是创建一个以双引号开头的环境变量名称。) - Simon Kissane