使用 setx 分配空系统变量

Edu*_*ard 6 batch-file

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

setx samplepassword ""
Run Code Online (Sandbox Code Playgroud)

但此时echo %samplepassword%,本应是空字符串的却出现了%samplepassword%。现在我在文档中找到了这个

设置“”(空引号)的值将显示删除变量 - SET 不会显示它,但变量名称将保留在注册表中。

http://ss64.com/nt/setx.html

如何使用 setx 分配一个空的系统变量?

更新:我已经通过 Windows GUI 检查了环境变量:Control Panel | System | Advanced | Environment Variables并发现DB_PASSWORD确实使用空字符串值进行了初始化。但是为什么执行会echo %samplepassword%给出上面的输出呢?准确地说,我已经打开了一个新的 cmd 实例。

Jea*_*bre 5

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

以管理员身份运行

reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment"  /v TESTENV /d ""
Run Code Online (Sandbox Code Playgroud)

添加注册表项:

在此输入图像描述

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

在此输入图像描述

但调用时不在列表中set

所以即使有可能,也是毫无用处的。然而,它可能会欺骗一些测试环境的程序。通过检查注册表项是否存在来确定变量是否存在。因此,它甚至可能会适得其反,并造成混乱。

  • 离“无用”还很远。我在 Unix 中一直使用空的环境变量。非常有用 - 只是在亲爱的旧 Windows 中损坏了。 (3认同)
  • 好吧,从技术上讲,不可能在**环境**中创建一个空变量。您的示例表明可以在注册表中创建一个空变量**,这是完全不同的事情!你的结论很有用:程序永远不应该检查_环境变量_并检查_注册表_。 (2认同)

Edu*_*ard 4

\n

我认为你在这里有一个误解。无法将\n“空字符串”分配给环境(批处理)变量。命令 set\n "samplepassword=" 删除变量,因此 echo "%samplepassword%"\n 只显示 ""。您不需要 setx 命令来执行此操作,setx 也无法修改此行为。\xe2\x80\x93阿西尼8 月 9 日 4:39

\n
\n\n

TL;DR:从技术上讲,不可能在环境中创建空变量。\xe2\x80\x93阿西尼

\n