Batch file 使用setx分配空系统变量

Batch file 使用setx分配空系统变量,batch-file,Batch File,我需要一个系统变量,并为其分配一个空字符串值。我试过了 setx samplepassword "" 但是在回显%samplepassword%时,应该是空字符串的是%samplepassword%。现在我在文件里找到了这个 将显示设置值“”(空引号)以删除变量 -它不按集合显示,但变量名将保留在注册表中 如何使用setx分配空系统变量 更新: 我已经通过Windows GUI检查了环境变量:controlpanel | System | Advanced | environment var

我需要一个系统变量,并为其分配一个空字符串值。我试过了

setx samplepassword ""
但是在
回显%samplepassword%
时,应该是空字符串的是
%samplepassword%
。现在我在文件里找到了这个

将显示设置值“”(空引号)以删除变量 -它不按集合显示,但变量名将保留在注册表中

如何使用setx分配空系统变量

更新:
我已经通过Windows GUI检查了环境变量:
controlpanel | System | Advanced | environment variables
,发现
DB|u密码确实是用空字符串值初始化的。但是为什么执行
echo%samplepassword%
会给出上述输出?准确地说,我已经打开了一个新的cmd实例。

从技术上讲,您可以创建一个空的环境变量,但不能使用
setx

以管理员身份运行

reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment"  /v TESTENV /d ""
将添加注册表项:

它甚至显示在环境变量系统面板中

但在调用
set

因此,即使有可能,它也是毫无用处的。然而,如果env不正确,它可能会愚弄一些测试程序。通过检查注册表项是否存在,变量是否存在。因此,这甚至可能适得其反,造成混乱


我想你在这里有一个误解。没有办法分配一个 环境(批处理)变量的“空字符串”。命令集 samplepassword=“删除变量,因此回显“%samplepassword%” 只需显示“”。您不需要setx命令就可以做到这一点,setx也不能做到 修改此行为8月9日4:39


TL;DR:从技术上讲,不可能在环境中创建空变量

对我来说似乎是对的。我怀疑您的db password变量是否真的为空。它可能使用了一些无法显示的字符。我实际上尝试了
setx samplepassword“\”
然后
echo%samplepassword%
向我显示了
\
。然后,我尝试了
setx samplepassword”“
以查看是否会发生相同的系统行为,结果确实发生了。我认为您在这里有一个误解。无法将“空字符串”分配给环境(批处理)变量。命令
set“samplepassword=“
删除变量,因此
echo“%samplepassword%”
只需显示
。您不需要使用
setx
命令来执行此操作,也不需要
setx
命令来修改此行为。很抱歉@Aacini,但问题还不清楚吗?我对你的评论感到困惑。@EduardDaduya Aacini的评论是正确的。即使设置了一个空的系统变量,在环境中该变量也不能存在,因为它是空的。当您尝试在命令行上回显空变量时,完整表达式将保持不变,因此您将获得
%samplepassword%
。在批处理文件中,当您尝试
回显密码为%samplepassword%
时,它会按预期工作。从技术上讲,不可能在环境中创建空变量。您的示例表明,可以在注册表中创建一个空变量,这是完全不同的事情!您的结论很有用:程序不应该检查注册表中的环境变量。谢谢!我知道这是有道理的。我记得有一次因为这个原因被抓到,当时一个脚本失控了,不情愿地用这个方法创建了空变量。这远非“无用”。我在Unix中一直使用空的环境变量。非常有用-刚刚打破了亲爱的旧窗户。