中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎样过滤出这个注册表中需要的部分?
作者:
标题: 怎样过滤出这个注册表中需要的部分? 上一主题 | 下一主题
ultralqxq
初级用户




积分 165
发帖 27
注册 2004-11-11
状态 离线
『楼 主』:  怎样过滤出这个注册表中需要的部分?

我的系统是XP,我把注册表里的服务列表导了出来当备份。可是直接导进备份会报错,所以我希望谁能告诉我,怎样提取路径跟start参数,这样就不会报错了!
如只提取路径的命令:
ren servicers.reg  servicers.txt
for %a in (servicers.txt) do find "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services"  >>d:\2.txt
可是再加上同时提取start的命令我就写不出来了,谁能帮我 ?
services.reg的内容如下:
wiindows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Abiosdsk]
"ErrorControl"=dword:00000000
"Group"="Primary disk"
"Start"=dword:00000004
"Tag"=dword:00000003
"Type"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\abp480n5]
"ErrorControl"=dword:00000001
"Group"="SCSI miniport"
"Start"=dword:00000004
"Tag"=dword:00000038
"Type"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\abp480n5\Parameters]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\abp480n5\Parameters\PnpInterface]
"5"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ac97intc]
"Type"=dword:00000001
"Start"=dword:00000003
"ErrorControl"=dword:00000001
"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,\
  72,00,69,00,76,00,65,00,72,00,73,00,5c,00,61,00,63,00,39,00,37,00,69,00,6e,\
  00,74,00,63,00,2e,00,73,00,79,00,73,00,00,00
"DisplayName"="Intel(r) 82801 Audio Driver Install Service (WDM)"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ac97intc\Security]
"Security"=hex:01,00,14,80,90,00,00,00,9c,00,00,00,14,00,00,00,30,00,00,00,02,\
  00,1c,00,01,00,00,00,02,80,14,00,ff,01,0f,00,01,01,00,00,00,00,00,01,00,00,\
  00,00,02,00,60,00,04,00,00,00,00,00,14,00,fd,01,02,00,01,01,00,00,00,00,00,\
  05,12,00,00,00,00,00,18,00,ff,01,0f,00,01,02,00,00,00,00,00,05,20,00,00,00,\
  20,02,00,00,00,00,14,00,8d,01,02,00,01,01,00,00,00,00,00,05,0b,00,00,00,00,\
  00,18,00,fd,01,02,00,01,02,00,00,00,00,00,05,20,00,00,00,23,02,00,00,01,01,\
  00,00,00,00,00,05,12,00,00,00,01,01,00,00,00,00,00,05,12,00,00,00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ac97intc\Enum]
"0"="PCI\\VEN_8086&DEV_2445&SUBSYS_0A191019&REV_11\\3&13c0b0c5&0&FD"
"Count"=dword:00000001
"NextInstance"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ACPI]
"ErrorControl"=dword:00000001
"Group"="Boot Bus Extender"
"Start"=dword:00000000
"Tag"=dword:00000001
"Type"=dword:00000001
"DisplayName"="Microsoft ACPI Driver"
"ImagePath"=hex(2):53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
  52,00,49,00,56,00,45,00,52,00,53,00,5c,00,41,00,43,00,50,00,49,00,2e,00,73,\
  00,79,00,73,00,00,00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ACPI\Enum]
"0"="ACPI_HAL\\PNP0C08\\0"
"Count"=dword:00000001
"NextInstance"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ACPIEC]
"ErrorControl"=dword:00000001
"Group"="Boot Bus Extender"
"Start"=dword:00000004
"Tag"=dword:00000005
"Type"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\adpu160m]
"ErrorControl"=dword:00000001
"Group"="SCSI miniport"
"Start"=dword:00000004
"Tag"=dword:0000003c
"Type"=dword:00000001
。。。(还有很多类似的,就不复制了)



[此贴子已经被作者于2004-11-16 0:12:01编辑过]




2004-11-15 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ultralqxq
初级用户




积分 165
发帖 27
注册 2004-11-11
状态 离线
『第 2 楼』:  

我想我表达的不是很好,我再解释一下:根据上面的注册表,我希望经过处理后得到下面这样的样子:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services][HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Abiosdsk]"Start"=dword:00000004[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\abp480n5]
"Start"=dword:00000004。。。。(省略一下,因为下面的也是这格式)然后我在开头自己加上一句:wiindows Registry Editor Version 5.00   就可以用了!


2004-11-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 3 楼』:  

第一,你没有必要使用这种方式修改注册表,因为你可以直接使用reg命令。详情请查看reg /?第二,reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" /v Start /s第三,按照你的思路的解决办法:doit.cmd内容:[/url]
@echo off
if %1#==# goto _quit
echo "%1" | find /i "current" > nul && set c=%1%2%3%4%5%6%7%8%9
echo "%1" | find /i "start" > nul && echo %c% >> myservice.reg && echo %1=%2%3%4%5%6%7%8%9 >> myservice.reg  && echo. >> myservice.reg && set c=
:_quit
然后执行命令:
for /f "tokens=*" %i in (services.reg) do @call doit %i



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2004-11-16 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
ultralqxq
初级用户




积分 165
发帖 27
注册 2004-11-11
状态 离线
『第 4 楼』:  

谢谢你的热心帮助,真不好意思哦,我很菜的,我根本不知道XP中还有reg这个命令,所以只想到了这个笨方法!!
我照你第二个方法测试了一下,不行呢。不知道你去试过没有?
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" /v Start /s
这句命令中的/V Start 跟/S是不能并用的!虽然解释说明中说可以,可我实践证明不行的!不信你去试试看。
还有我试了reg save  HKLM\SYSTEM\CurrentControlSet\Services  Services.hiv   结果备份成功了
可是用reg restore恢复却根本不可能做到,就算我进到带命令行的安全模式下也不行!提示拒绝访问!
最后一个方法写得很复杂(对我而言),我还在研究中,我很菜的,想看懂它,我想要花些时间吧!

[此贴子已经被作者于2004-11-19 4:48:19编辑过]




2004-11-18 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ultralqxq
初级用户




积分 165
发帖 27
注册 2004-11-11
状态 离线
『第 5 楼』:  

[em06][em06][em06]看晕了也搞不懂,大侠解释一下好吗?
set c=%1%2%3%4%5%6%7%8%9  是什么意思?用来做什么的?我根本不懂这个。
> nul  请问nul是什么设备?
set c=    这句是设C为变量是吗?
echo >> myservice.reg    这里的 >>myservice.reg不用加双引号吗?
太多不知道,所以读不懂程序。于是我就直接复制过来,由于我不懂怎么编译CMD文件,所以把doit.cmd改成doit.bat,这应该没关系的吧?可是照着你给的命令输完后,什么提示都没有,也没生成myservice.reg文件。
PS:最后我改用VBS编写的脚本解决了问题。可是我还是想知道上面的疑问,为什么我不能运行你提供的方法?麻烦老兄解释一下好吗?万分感谢。

[此贴子已经被作者于2004-11-19 5:24:21编辑过]




2004-11-19 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
死性不改
中级用户




积分 378
发帖 88
注册 2004-5-5
状态 离线
『第 6 楼』:  

XP系统中的findstr命令可以轻松搞定这个问题。type Services.reg >Services.txt
findstr /i "Services Start" Services.txt>>myservices.reg



www.51ct.net
2004-11-19 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 7 楼』:  

我写的批处理是有问题的,在运行过程中会出错误退出。我忘了xp中有findstr这个命令,这个命令是支持正则表达式的,更适合应用于楼主的情况,如下:findstr /R "^\[HKEY ^\"Start\"" services.reg > myservices.reg另外,也可以考虑使用第三方工具,例如sed,处理的可能会更准确一些,但研究起来也更复杂。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2004-11-19 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: