Board logo

标题: [注册表类] [已解决]如何在注册表中的键值中使用全局变量 [打印本页]

作者: dizimotong    时间: 2018-6-7 15:55     标题: [已解决]如何在注册表中的键值中使用全局变量

本帖最后由 dizimotong 于 2018-6-8 09:36 编辑

一、背景
先说说问题的背景,有一台电脑,系统XP,多人共用,每个人都有一个账号,各个用户在D:\各自登录用户名\tools\的路径下有一个用来处理目录的批处理test.bat,该批处理文件名相同,但是里面的代码不同,每个用户专门订做的,但都是用处理目录的。
现在我要将这些批处理注册到注册表的目录项中,然后就可以用点击文件夹的右键,在其右键菜单中调用批处理来快速处理一些目录,我是这样处理的:
1)在HKEY_CLASSES_ROOT\Directory\shell 建立子项test
2) 在新建的子项test下再建立一个子项command
3)在该子项command键入数值 D:\%USERNAME%\tools\test.bat "%1"
二、问题
当我按上述步骤注册好注册表后进行测试,发现右键菜单中我创建的test项无法运行,于是我就用具体的登录用户名代替上述步骤第3步中的%USERNAME%,再进行测试,结果运行成功。但是我的初衷是希望每个用户可以使用各种用户名下的批处理来处理目录的,这样子就只能使用一个特定用户的批处理了。

我就怀疑%USERNAME%是不是全局变量?但我在CMD下用echo %USERNAME%的确能够输出具体的登录用户名,而且我发现一些注册表项的数据用用到%SYSTEMROOT%这个全局变量。
所以就想请假高手们如何在注册表中的键值中使用全局变量?
作者: WHY    时间: 2018-6-7 18:15

本帖最后由 WHY 于 2018-6-8 16:53 编辑

环境变量分为两种:系统环境变量,用户环境变量。UserName 属于系统环境变量,很明显它就是全局的,对所有用户生效的。

注册表值中的 %USERNAME% 不自动扩展,是因为默认值的类型是 reg_sz,而不是 reg_expand_sz 类型。
可以指定用 cmd 扩展变量,把注册表值改成:
cmd /c D:\%%USERNAME%%\tools\test.bat "%1"
作者: dizimotong    时间: 2018-6-8 09:37

回复 2# WHY
谢谢,试验一下,的确可以运行,受教了!
作者: kkkmmm    时间: 2018-6-13 19:52

厉害啊,这种分析式的解答看着就是解惑




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2