在注册表中设置用户或系统环境变量的值

============================================================================
程序: envy —— 命令行环境变量管理工具
作者: 飞麦, mailto:fitmap@qq.com, 2010-10-26~2026-08-02
重写: 2026-08-02 用 C++23 std::string 现代化改写(去 TCHAR / 去 ShLwApi.Lib)
增强: 2026-08-02 增加"查询显示"模式、单变量限制、多目录 ; 分隔、
尾部反斜杠归一、-?/-h/--help 帮助、函数/变量命名重构


功能概述:

  • 通过直接读写注册表,对用户或系统的环境变量进行"设置 / 增加 / 减少 / 清除"。
  • 对 Path、ClassPath、RubyLib 这类"路径型"变量,会自动剔除其中已不存在
    的目录或文件,避免环境变量被失效路径污染。
  • 新增"查询显示"模式:不带 = 的单个变量名会列出它在 HKLM / HKCU 中的值
    (每行一项,不显示分号)。

命令行语法:
envy [选项] <表达式>
<变量名> 查询显示该变量(HKLM / HKCU)
<变量>="值" 设置(覆盖)变量值
<变量>+="项" 向变量追加一项(多个项用 ; 隔开,自动去重)
<变量>-="项" 从变量移除一项(多个项用 ; 隔开,可非连续)
<变量>="" 清除(删除)该变量
选项:
/s -s 操作系统环境变量(HKLM),需以管理员身份运行
/u -u 操作用户环境变量(HKCU),默认
/? /h -? -h --help 显示本帮助

说明:

  • 每次只能操作一个环境变量(多个表达式会报错)。
  • 查询模式只读注册表、不修改;增/删/改会广播 WM_SETTINGCHANGE 使进程刷新。
  • 值类型固定为 REG_EXPAND_SZ(支持 %VAR% 内嵌引用,如 %JAVA_HOME%\bin)。

实现要点:

  • 用户变量写 HKEY_CURRENT_USER\Environment
  • 系统变量写 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
  • 纯 C++23 标准库实现(std::string + std::filesystem),不再链接 ShLwApi.Lib
  • 内部一律用 UTF-8 的 std::string;仅在调用 Win32 API 的边界转换成 UTF-16

下载链接:https://share.weiyun.com/Z2GRQlGm 密码:btujdf

posted @ 2023-12-22 16:25  飞麦  阅读(149)  评论(0)    收藏  举报