标题: 关于用批处理命令修改注册表!!
[打印本页]
作者: ken0212
时间: 2006-4-10 23:48
标题: 关于用批处理命令修改注册表!!
今天遇到一个问题就是用批处理命令修改注册表时遇到不懂的问题!以下是我编写的代码:
@echo off
echo Windows Registry Editor Version 5.00>>ok.reg
echo [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]>>ok.reg
echo "key"="C:\\WINDOWS\\key.exe">>ok.reg
regedit /s ok.reg
del ok.reg
不知道有没有错的!这是REG文件里的代码:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
"key"="C:\\WINDOWS\\key.exe"
不明白是我在编写其他的注册项的时候就可以导入.但是有几个我怎么编也导不进去.我反复修改了N次了.应该没有问题了啊.我真的搞不清楚了.是不是命令用错了.麻烦高手指点一下.我都快疯了~~~如果可能的话加我QQ:50594677和我详细说一下!!
作者: Climbing
时间: 2006-4-11 09:02
代码应该是没有错误的。
把不能导入的代码贴出来,大家帮你看看,加QQ就免了。
作者: ken0212
时间: 2006-4-11 11:32
就是上面的代码不能导入啊..不然你们在自己的机上试试.
作者: chenhui530
时间: 2006-4-11 11:54
使用REG工具不是更好
作者: kcdsw
时间: 2006-4-11 12:22
呵呵 空行
你空了么?
作者: kcdsw
时间: 2006-4-11 12:23
另外路径是\ 不要用\\
这个我也改过的
作者: 3742668
时间: 2006-4-11 13:03
TO 楼上:
在XP中已经不需要空行了,而且开头的Windows Registry Editor Version 5.00也可以用REGEDIT4来代替。另外路径中的\也要在前面加个\来转义。
Re 楼主:
个人认为代码是没有错的,而且根据你的描述:
“不明白是我在编写其他的注册项的时候就可以导入.但是有几个我怎么编也导不进去.我反复修改了N次了.应该没有问题了啊.”
初步认为,由于run键的特殊性,可能开启了杀毒软件的注册表监控,导致一经修改又被恢复,所以建议先关闭杀毒软件以及其他监视类软件再修改。另外也许有权限的可能在里面,不过只要没有特别设置,对于HKEY_CURRENT_USER下的键应该是可以更改的。个人认为楼主应该从这几方面着手去检查。
作者: xuantian
时间: 2006-4-11 15:58
建议用reg命令,这样可以支持变量的录入
例如:
下面是拼音加加优盘版的部分批处理命令
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v %SystemRoot%\system32\pyjj4.ime /t REG_SZ /d WINXPSP2 /f //Vista系统修正
set /p usbjj= 请输入当前路径后回车 //优盘加加路径
reg add "HKLM\SOFTWARE\jj4" /v "install path" /t REG_SZ /d "%usbjj%" /f //优盘加加路径
%SystemRoot% 会替换为windows的安装路径
%usbjj% 会替换为键盘输入的字符
[
Last edited by xuantian on 2006-4-11 at 16:05 ]
作者: ken0212
时间: 2006-4-11 21:02
回复7楼:
你说的两种方法我都试过了.都是以失败告终.真的很郁闷.也不知道出现什么错误.7楼大哥你也可以自己试验一下.帮忙找一下是什么问题!也很希望高手来解答一下..~~
回复8楼:
我曾经看来有人用过setlocal命令和reg add 命令来修改注册表.以下是我看到的代码:
@echo off
setlocal
set regkey="HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Licensing Core"
reg add %regkey% /v EnableConcurrentSessions /T REG_DWORD /D 1 /f
endlocal
由于本人不太熟悉这两个命令.请高手给我讲解一下~~~谢谢了.
作者: 3742668
时间: 2006-4-11 21:14
用你的代码测试成功,当前用户只具有users组的权限,未开启杀毒软件(其实是没装过)。
代码看来是可行的,不知道你是怎么测试的。
你可以先手工在run键下添加一键试试。
作者: ken0212
时间: 2006-4-11 21:41
我生成批处理文件后就直接双击运行了啊..我的用户是管理员的权限呢..应该不是这个问题吧.我也不知道是什么问题.但是我用reg add 命令就可以加进去.还有就是用reg add 命令时.有时候会出现参数太多的错误.请问一下这是什么错误.应该如何解决!!!
作者: xuantian
时间: 2006-4-11 23:25
在使用 reg 命令时将添加的键和键值用引号引起来,这样之间有空格时才不会出错.
至于命令,可以使用帮助,都是中文的
比如: 添加注册项可用 reg add /? 来获取帮助等等....
作者: ken0212
时间: 2006-4-12 15:35
谢谢12楼.问题已经解决了..
作者: xuantian
时间: 2006-4-12 16:35
标题: 用批处理命令操作注册表的误区
Windows Registry Editor Version 5.00>>aaa.reg
用上面的命令来建立注册表临时文件,并通过它来间接操作注册表是不正确的方法.
原因是:
通过这样操作保存的临时文件是超文本格式, 但 Windows Registry Editor Version 5.00 注册表却是(UniCode)双字节文本,NT的注册表一旦检测到注册表文件中的第一行为 Windows Registry Editor Version 5.00 时,就会将它最为二进制的NT注册表文件,理所当然的, 这个注册表文本也就被NT的注册表当作UniCode文本来出来了.
一般来说,如果在此时,注册表项和值中没有空格时,应该是可以正常导入的,但如果其中一项或一值中有空格时,注册表的识别就会出错,比如"Windows NT".
所以正确的写法应该是 REGEDIT4>>aaa.reg
这样建立文件才会被NT的注册表当作纯文本格式的注册表文件(即Win9X系列的注册表文件格式),也就不会再出错了.
Windows Registry Editor Version 5.00>>aaa.reg 的写法是混淆了注册表的格式感念! 所以有时会出错也就不奇怪了
暂时就写到这里吧, 想到后再继续:D
作者: JonePeng
时间: 2006-4-12 21:00
嗯。NT平台的系统都是以 Unicode 来编码,而且这些系统都向下兼容 DOS/Win9x 用的 ANSI 编码。
NT系统下的“记事本”,其保存类型选项中就有几种文本类型。相比之下,Win9x的“记事本”真的逊色很多!
作者: ken0212
时间: 2006-4-13 11:38
谢谢楼主了...受益良多~~~
作者: willsort
时间: 2006-4-15 00:38
───────────────── 版务记录 ─────────────────
执行:Will Sort
操作:合并主题:《20054 - 用批处理命令操作注册表的误区》
说明:二主题存在上下文的直接联系
处罚:鉴于主题具有原创意义和较高价值,不予积分处罚
───────────────── 版务记录 ─────────────────
Re ken0212:
猜测你用批处理生成.REG文件无法完全正常导入可能有以下两个原因:
1、注册表项或键值串中有某些会影响echo输出的特殊字符;
2、regedit/s的导入方式可能对某些类型的键值不太支持,XP环境可以考虑改用regedit ok.reg的方式试试。
所以,仍然需要你贴出有哪些无法导入的键值,才有利于问题的判断与解决。当然,如果楼主使用reg add解决问题便不必穷根究底,可以考虑结帖了。
Re xuantian:
以上回复于看到你的主题帖之前,显然易见,由于本人孤陋寡闻,不免误入歧途。为了避免更多人重蹈覆辙,同时也为了讨论上的连贯性,自作主张将主题合并了,如果兄开新主题别有深意,不妨明言,如果确有必要,我会再行拆分。
[
Last edited by willsort on 2006-4-15 at 01:05 ]
作者: wgef
时间: 2006-7-27 22:11
哦,好。
作者: IceCrack
时间: 2006-7-28 15:06
看了xuantian的一番帖子后.收获不少啊
作者: manfred8520
时间: 2006-7-30 12:25
还是新手上的菜菜鸟啊..很多都不明白的...