[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[注册表类] [已解决]想做一个卸载注册表项的批处理,请问如何判断某一项下有没有子项?

本帖最后由 killer3k 于 2012-10-24 00:17 编辑

比如说某些游戏会有一代、二代……,相关的注册表项都在一个总项下,
如注册表中内容如下:
=========
游戏公司名
|--游戏名1
|--游戏名2
=========
现在想给游戏1和游戏2分别写一个批处理卸载相关的注册表项。
比如说要卸载“游戏1”的话,如果直接删除“游戏公司名”项的话,那么连“游戏2”的相关内容也一并删除了。
如果删除“游戏名1”项的话,那么,当并没有安装“游戏2”时,注册表中依然会留下一下“游戏公司名”的空项。

目前,“游戏1”的卸载批处理我是这样做的:
1、判断是否存在“游戏名2”项,如果存在,则批处理仅删除“游戏名1”项;
2、如果不存在“游戏名2”项,则直接删除“游戏公司名”项。
“游戏2”的卸载批处理与此类似。

但是这样一来,又存在一问题,不具备通用性。
比如说将来游戏出了第三代“游戏3”的话,“游戏公司名”这个总项下将会多出一个“游戏名3”的子项,那么“游戏1”和“游戏2”的卸载批处理必须重新修改。添加进对“游戏名3”的判断,才能正确的处理是单独卸载“游戏公司名”这个总项下的某一个子项,或者直接删除“游戏公司名”这个总项。

所以,我理想中的批处理是应该这样的:
1、删除“游戏公司名”下的某一子项比如说“游戏名1”;
2、判断“游戏公司名”下是否还有其它子项,是否为空;
3、如果“游戏公司名”下没有任何子项(名称不一定),那么就删除“游戏公司名”项;如果“游戏公司名”项不为空,下面还有任意子项,则批处理结束,不再做任何处理。
现在,就是第二步“判断“游戏公司名”下是否还有其它子项”,不知道该怎么做,用什么命令可以做到。

请问,如何判断某一注册表项下是否存在子项?

本帖最后由 apang 于 2012-10-23 22:25 编辑
  1. @echo off
  2. set "v_reg=HKEY_LOCAL_MACHINE\SOFTWARE\游戏公司名称"
  3. for /f "delims=" %%a in ('reg query "%v_reg%" 2^>nul^|find /i "%v_reg%\"') do (
  4.    set /a n+=1
  5.    if /i "%%~na"=="游戏1" set /a "n-=1"&echo,reg delete "%%a" /f
  6. )
  7. if "%n%"=="0" echo,reg delete "%v_reg%" /f
  8. pause
复制代码
1

评分人数

TOP

回复2楼apang:
太棒了,非常感谢!
照葫芦画瓢,把以前的一些卸载批处理都改了。

另,发现一个问题,如果注册表项中有“.”号——即小数点号的话,需要把“%%~na”改为“%%~nxa”,即还要包括扩展名。

才发现,我最高只能评一分。

TOP

返回列表