找回密码
 加入
搜索
楼主: drunk

请教怎么实现删除注册表某项下的几个指定项之外的其他项

[复制链接]
 楼主| 发表于 2009-6-30 14:36:00 | 显示全部楼层
哈哈,高兴死了
首先感谢下楼上所有朋友的回答
我的问题终于完满解决了
最终代码如下
$a="b"
$d='a'
$c="c"

For $i = 1 To 100 Step 0.01
$key=RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl",$i)
                $Compare1=StringCompare($key,$a, 2)
                $Compare2=StringCompare($key,$d, 2)
                $Compare3=StringCompare($key,$c, 2)
                If  $Compare1*$Compare2*$Compare3 <> 0 Then
                        RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl"&$key)
                EndIf
If @error <> 0 then ExitLoop
Next
哈哈,我真是觉得太搞笑了,不知道为什么把"step"设置成0.01就可以了
真是搞不懂哦呵呵,我先是设置的0.5,发现一次可以多删掉几个了
后来改设为0.1,发现30个删得只剩2个
最终我设置为0.01,130个全删了,但另外的三项"a","b","c"都没删
终于成功了
大家也可以试下,呵呵,太高兴了
我发个自动创建100个项的代码
大家有兴趣的可以试下哈哈
另外再自己添加"a","b","c"这三项
你看是不是出了上面三项其余全删光光
如果有更多的要删可以把step设置更小就可以一次删除
ok自动创建1-100个项代码如下
For $i = 1 To 100 Step 1
        RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl"&$i)
Next
呵呵,写脚本研究脚本是件很有意思的事,能让人思考,让提高解决问题的能力,而且当自己吧问题解决了会让人很满足很有成就感哈哈
 楼主| 发表于 2009-6-30 14:36:10 | 显示全部楼层
哈哈,高兴死了
首先感谢下楼上所有朋友的回答
我的问题终于完满解决了
最终代码如下
$a="b"
$d='a'
$c="c"

For $i = 1 To 100 Step 0.01
$key=RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl",$i)
                $Compare1=StringCompare($key,$a, 2)
                $Compare2=StringCompare($key,$d, 2)
                $Compare3=StringCompare($key,$c, 2)
                If  $Compare1*$Compare2*$Compare3 <> 0 Then
                        RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl"&$key)
                EndIf
If @error <> 0 then ExitLoop
Next
哈哈,我真是觉得太搞笑了,不知道为什么把"step"设置成0.01就可以了
真是搞不懂哦呵呵,我先是设置的0.5,发现一次可以多删掉几个了
后来改设为0.1,发现30个删得只剩2个
最终我设置为0.01,130个全删了,但另外的三项"a","b","c"都没删
终于成功了
大家也可以试下,呵呵,太高兴了
我发个自动创建100个项的代码
大家有兴趣的可以试下哈哈
另外再自己添加"a","b","c"这三项
你看是不是出了上面三项其余全删光光
如果有更多的要删可以把step设置更小就可以一次删除
ok自动创建1-100个项代码如下
For $i = 1 To 100 Step 1
        RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl"&$i)
Next
呵呵,写脚本研究脚本是件很有意思的事,能让人思考,让提高解决问题的能力,而且当自己吧问题解决了会让人很满足很有成就感哈哈
发表于 2009-6-30 14:50:16 | 显示全部楼层
我上面搞成删除它们了,原来是保留它们
 楼主| 发表于 2009-6-30 14:51:58 | 显示全部楼层
afan你发的这个真的不行哦
你不相信你先用我发的那个自动创建项的脚本创建100个项另外再手动创建"a","b","c"三项
然后用你的代码删除看看
是乱删的
本来我是要删除输入法的项的
但怕搞乱了找不到
所以在输入法下面的项新建的子项进行测试的
所以数组不上之前发的那些数组
你的代码应该改这样
Dim $dr[3] = ["a", "b", "c"]
$i = 1
While 1
        $key=RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl",$i)
        If @error <> 0 then ExitLoop
        for $n = 0 to 2
                If $key <> $dr[$n] Then
                        RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl"&$key)
                EndIf
        next
        $i = $i + 1
WEnd
但问题就是删不掉...
我这网络慢,有人在看电影...
可能一次发两下,晕
 楼主| 发表于 2009-6-30 14:52:04 | 显示全部楼层
afan你发的这个真的不行哦
你不相信你先用我发的那个自动创建项的脚本创建100个项另外再手动创建"a","b","c"三项
然后用你的代码删除看看
是乱删的
本来我是要删除输入法的项的
但怕搞乱了找不到
所以在输入法下面的项新建的子项进行测试的
所以数组不上之前发的那些数组
你的代码应该改这样
Dim $dr[3] = ["a", "b", "c"]
$i = 1
While 1
        $key=RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl",$i)
        If @error <> 0 then ExitLoop
        for $n = 0 to 2
                If $key <> $dr[$n] Then
                        RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl"&$key)
                EndIf
        next
        $i = $i + 1
WEnd
但问题就是删不掉...
我这网络慢,有人在看电影...
可能一次发两下,晕
发表于 2009-6-30 15:54:15 | 显示全部楼层
你再试试哈
Dim $dr[6] = ["00000409", "00000804", "00020409", "E0040804", "E0200804", "E0210804"]
$t = 0
for $i = 1 to 200  Step 0.01
        $key = RegEnumKey('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Keyboard Layouts', $i)
        If @error <> 0 then ExitLoop
        for $n = 0 to 5
                If $key = $dr[$n] Then
                        $t = 1
                EndIf
        next
        if $t <> 1 then RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Keyboard Layouts" & $key)
        $t = 0
next
发表于 2009-7-2 20:01:39 | 显示全部楼层
本帖最后由 netegg 于 2009-7-2 20:09 编辑

借9楼的代码用一下
Dim $dr= "00000409/00000804/00020409/E0040804/E0200804/E0210804"
$i = 1
While 1
&#160; &#160; &#160; &#160; $key = RegEnumKey('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Keyboard Layouts', $i)
&#160; &#160; &#160; &#160; If @error <> 0 then ExitLoop
&#160; &#160; &#160; &#160; if stringinstr($dr, $key) = 0 then
&#160;&#160; &#160; &#160; &#160; &#160;RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Keyboard Layouts\" & $key)
&#160; &#160; &#160; &#160; &#160; &#160;msgbox(0, $n, $key)
&#160; &#160; &#160; &#160; &#160;EndIf
&#160; &#160; &#160; &#160; $i = $i + 1
WEnd
循环嵌套在每种语言里都是能避免就少避免,无形加大程序负荷
发表于 2009-7-2 20:48:29 | 显示全部楼层
22# netegg


谢谢指点~~~ 不过你的代码也存在不能一次删除干净的问题,也是运行一次删一点,倒是我#21楼的可以一次删除干净,不知道你的代码要怎样处理一下,似乎是步进的问题
发表于 2009-7-2 21:29:31 | 显示全部楼层
本帖最后由 netegg 于 2009-7-2 21:30 编辑

那不是步长的问题,是Enum本身就似乎没有顺序的,不信的话,你可以试试别的键,我曾经试过,一般五次可以确保删除干净(对于子键比较多的)
发表于 2009-7-2 23:34:20 | 显示全部楼层
一个很简单的方法就是导出指定项,然后删除上一级目录,再导入.....
发表于 2009-7-3 08:59:45 | 显示全部楼层
顶上去,哈哈
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-12 23:42 , Processed in 0.068258 second(s), 13 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表