让注册表的值可以解析系统变量

问题

如何在注册表键值中使用系统变量全局变量,系统变量在注册表的值中失效,注册表中值上写了系统变量不解析

上面这个问题困扰了我挺久,然后单独一篇文章做下记录

之前在写reg文件的时候发现我增加到注册表的自定义系统变量都不能用

像%TEST_HOME%写入到注册表的值中并不能被正常解析,但是在cmd中用echo %TEST_HOME%是可以正常输出变量的值的。

网上查了不少资料后发现可以利用cmd /c的方式使系统变量在注册表中生效。

例子:

我在环境变量里面新建了个系统变量

然后再cmd里面执行echo %TEST_HOME%可以正常输出变量的值,也就是D盘的路径

然后我修改了注册表的键值

但是我发现%TEST_HOME%并不能正常解析成D:\mytest\path

从而导致D:\mytest\path\bin下的服务不能正常使用

修改成绝对路径是可以正常使用服务的,但是这样会造成很大的麻烦,如果%TEST_HOME%变量能正常用,则会省去很多麻烦

解决方法

在键值前面加上 cmd /c 成功使变量正常工作

个人理解

仅是个人猜测理解,不确定是否真实原理是这样,不保证理解正确性,希望有大佬帮忙解释下原因

cmd /c 效果是是执行完后面的命令后关闭命令窗口

比如cmd /c dir是执行完dir命令后随即关闭命令窗口

很有可能是由于注册表中的键值,先被cmd执行了,因为在cmd中是可以正常理解%TEST_HOME%变量的,所以加上cmd /c后系统先做的操作应该是尝试用cmd /c去运行后面路径,因为路径中含有变量,所以变量成功被解析,和后面正常的路径一起作为注册表键值的输入,从而达到了在注册表中直接用绝对路径的效果。一句话说就是中间用cmd做了个过渡。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值