中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-09 12:34
47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,254 会员排行
DOS批处理 & 脚本技术(批处理室) » 如果追加内容到注册表的键值?是追加而不是替换!
可打印版本  999 / 14
第1楼 okace 发表于 2008-08-21 21:10
初级用户 发帖 15 积分 130
如果追加内容到注册表的键值?是追加而不是替换!
在论坛看了好几篇关于修改注册表的帖子,没找到追加注册表键值的内容,只好发帖来问。

问题1:
已知:Path=C:\one one
如何得到Path2,使Path2=C:\one one\two
其中two是固定值,one one代表含空格名称的文件夹。

问题2:
如何让一个注册表项PATH的键值从
Path=C:\one one;C:\three three;
改为
Path=C:\one one;C:\three three;C:\one one\two;
就是把Path2的内容追加到Path的键值中?


我的实际情况是:




请指教,谢谢!

[ Last edited by okace on 2008-8-22 at 12:43 AM ]
第2楼 lxmxn 发表于 2008-08-21 21:28
版主 发帖 4,938 积分 11,386
1、path2=%path%.\two

2、path=%path%;C:\one one\two;
第3楼 okace 发表于 2008-08-21 23:02
初级用户 发帖 15 积分 130
我承认我的提问做了误导。不过第二个问题是关于注册表键值的,楼上的答案好像不行吧?
问题2:
注册表项PATH的键值是C:\one one;C:\three three;
要改为 C:\one one;C:\three three;C:\one one\two;
第4楼 HAT 发表于 2008-08-21 23:37
版主 发帖 5,017 积分 9,023
第5楼 okace 发表于 2008-08-21 23:38
初级用户 发帖 15 积分 130
我的实际情况是:



请问上面的状况如何解决?我知道增加注册表项用 reg add 命令,但是实在不知如何利用变量!请大家帮忙!

[ Last edited by okace on 2008-8-21 at 11:43 PM ]
第6楼 HAT 发表于 2008-08-21 23:46
版主 发帖 5,017 积分 9,023
第7楼 okace 发表于 2008-08-22 00:05
初级用户 发帖 15 积分 130
楼上的先多谢了!
我看到for就头晕,正在理解中。
不过看到你应该是读取项TestPath的键值来定义two的路径,可是我希望使用setup.bat所在目录的当前路径来定义two的路径。
还有项TestPath的键值不止两个目录(C:\one one和C:\three three),而是多个目录。从代码上看好像该键值被分成两段SrcPathL和SrcPathR,一定要这样才可以吗?
还有路径都含空格,这允许吗?
还没测试,我马上测试。
第8楼 HAT 发表于 2008-08-22 00:10
版主 发帖 5,017 积分 9,023
测试以后再提问:)
第9楼 okace 发表于 2008-08-22 00:16
初级用户 发帖 15 积分 130
测试后项TestPath的键值为 ~-1SrcPathR;C:\one one\Setup.battwo
测试的注册表项TestPath的键值不是两个目录,是多个目录。
第10楼 okace 发表于 2008-08-22 00:20
初级用户 发帖 15 积分 130
测试的注册表项TestPath的键值改成两个目录,结果仍然同9楼。
第11楼 okace 发表于 2008-08-22 14:44
初级用户 发帖 15 积分 130
经多次试验修改6楼的代码如下:



经修改后基本满足要求了。非常感谢 HAT 的帮助。
可是 set CurPath=%~f0two 这行代码不理解啊,输入结果是当前目录含文件名的,比如会输出 D:\temp\a.battwo 。关于 %~f0 参数,请问哪里有资料可以参考?我在帮助里找不到这个参数。

[ Last edited by okace on 2008-8-22 at 03:13 PM ]
第12楼 HAT 发表于 2008-08-22 16:25
版主 发帖 5,017 积分 9,023

set CurPath=%~f0two
改成
set CurPath=%~dp0two

可以看看帮助:
for /?
第13楼 shenqingzj 发表于 2008-08-22 17:45
新手上路 发帖 1 积分 2
up
第14楼 okace 发表于 2008-08-22 19:10
初级用户 发帖 15 积分 130
另外,FOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:

~I - 删除任何引号("),扩充 %I
%~fI - 将 %I 扩充到一个完全合格的路径名
%~dI - 仅将 %I 扩充到一个驱动器号
%~pI - 仅将 %I 扩充到一个路径
%~nI - 仅将 %I 扩充到一个文件名
%~xI - 仅将 %I 扩充到一个文件扩展名
%~sI - 扩充的路径只含有短名
%~aI - 将 %I 扩充到文件的文件属性
%~tI - 将 %I 扩充到文件的日期/时间
%~zI - 将 %I 扩充到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个完全合格的名称。如果环境变量名
未被定义,或者没有找到文件,此组合键会扩充到
空字符串

可以组合修饰符来得到多重结果:

%~dpI - 仅将 %I 扩充到一个驱动器号和路径
%~nxI - 仅将 %I 扩充到一个文件名和扩展名
%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个驱动器号和路径。
%~ftzaI - 将 %I 扩充到类似输出线路的 DIR


这段我看到过,可是使用I替换0反而运行错误,我还以为不是这个参数。
请问为什么使用 %~f0 而不是帮助里的 %~fI 参数?
第15楼 HAT 发表于 2008-08-22 21:03
版主 发帖 5,017 积分 9,023
%0代表批处理文件本身,不能替换成%I
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023