Board logo

标题: [注册表类] [已解决]怎样用bat搜索regedit 关键字全部项,然后导出呢? [打印本页]

作者: 867258173    时间: 2014-11-5 16:24     标题: [已解决]怎样用bat搜索regedit 关键字全部项,然后导出呢?

本帖最后由 867258173 于 2014-11-6 13:10 编辑

这是个难题?需要两步骤。搜索后再导出。请大神有没方法?就要把每一个注册表项都写进去


意思是想运行regedit
然后编辑-查找-关键字
然后找到的这些项就保留下来的吧




我一般是比如【C:\Program Files\360】。【360】就是关键字。我一般就是用安装包的最后一个文件夹名当关键字搜索,知道搜索不出来就算完了。有的10多个注册表就完了。但一些大的几百个注册表。尤其是这几百个注册表搜索时难免会一直搜到子项,老有重复,工程量又大。所以请问大神有办法用批处理实现搜索regedit 关键字。去除重复的。要是有子项的,直接提取父项,忽略子项,没有父项的直接提取搜索到的子项。然后分别导出呢?请求解决
作者: apang    时间: 2014-11-5 20:27

win7 的话可以这样:
  1. reg query "hkcr" /s /f "txt" /k
复制代码
搜索计算机,那就把根键都加上:
  1. @echo off
  2. for %%a in (HKLM HKCU HKCR HKU HKCC) do (
  3.         reg query "%%a" /s /f "txt" /k
  4. )
  5. pause
复制代码

作者: 867258173    时间: 2014-11-5 21:53

回复 2# apang

谢大神,但这代码从哪添加关键字,又怎样自动导出reg?
作者: DAIC    时间: 2014-11-5 22:02

回复 3# 867258173


    reg query "hkcr" /s /f "关键字" /k
作者: 867258173    时间: 2014-11-5 22:55

回复 4# DAIC


   
试了下【360】当关键字单只搜索,没导出注册表啊?
作者: apang    时间: 2014-11-6 00:47

本帖最后由 apang 于 2014-11-7 10:18 编辑

回复 5# 867258173


    导出到不同的reg文件
  1. @set @n=0;/* & echo off & setlocal enabledelayedexpansion
  2. md "reg" 2>nul
  3. pushd "reg\"
  4. (for %%a in (HKLM HKCU HKCR HKU HKCC) do (
  5.         set "n="
  6.         for /f "delims=" %%b in ('reg query "%%a" /s /f "txt" /k') do (
  7.                 set /a n+=1
  8.                 reg export "%%b" %%a_!n!.reg
  9.         )
  10. )) 2>nul
  11. dir /b *.reg | cscript -nologo -e:jscript "%~0"
  12. start "" ".\"
  13. pause & exit/b & rem */
  14. fso = new ActiveXObject("Scripting.FileSystemObject");
  15. while (!WScript.StdIn.AtEndOfstream) {
  16.         file = WScript.StdIn.ReadLine();
  17.         f = fso.OpenTextFile(file, 1, false, -1);
  18.         txt = f.Readall();
  19.         f.Close();
  20.         txt = /[\s\S]*?^\[[\s\S]*?(?=^\[)/m.exec(txt + "\r\n[")[0];
  21.         fso.OpenTextFile(file, 2, true, -1).Write(txt);
  22. }
复制代码
导出并合并成一个reg文件(修改第2、3行变量的值)
  1. @set @n=0;/* & echo off
  2. set "keyword=txt"
  3. set "regfile=Result.reg"
  4. cd.>"%regfile%"
  5. (for %%a in (HKLM HKCU HKCR HKU HKCC) do (
  6.         for /f "delims=" %%b in ('reg query "%%a" /s /f "%keyword%" /k')do (
  7.                 reg export "%%b" $
  8.                 copy /b "%regfile%" + $ "%regfile%"
  9.                 del $
  10.         )
  11. )) 2>nul
  12. for %%a in ("%regfile%") do (
  13.         if "%%~za" NEQ "0" (
  14.                 cscript -nologo -e:jscript "%~0" "%regfile%"
  15.                 start NotePad "%regfile%"
  16.         ) else del "%regfile%"
  17. )
  18. pause & exit/b & rem */
  19. str = "Windows Registry Editor Version 5.00\r\n";
  20. regfile = WScript.Arguments(0);
  21. fso = new ActiveXObject("Scripting.FileSystemObject");
  22. f = fso.OpenTextFile(regfile, 1, false, -1);
  23. ar = f.Readall().split(str);
  24. f.Close();
  25. re = /^\[[\s\S]*?(?=^\[)/m;
  26. ar[0] = str + "\r\n";
  27. for (i=1; i<ar.length; i++) {
  28.         ar[i] = re.exec(ar[i] + "\r\n[")[0];
  29. }
  30. fso.OpenTextFile(regfile, 2, true, -1).Write(ar.join(""))
复制代码

作者: DAIC    时间: 2014-11-6 08:35

回复 5# 867258173


    是的,我只是告诉你如何使用 reg query 进行查询。
作者: 867258173    时间: 2014-11-6 12:33

本帖最后由 867258173 于 2014-11-6 13:10 编辑

回复 6# apang


  谢大神,成功导出了。这代码能增加个将子目录reg文件夹注册表合并成一个注册表吗?没有空行。
作者: apang    时间: 2014-11-7 10:21

回复 8# 867258173


    6楼已修改,试试
作者: 867258173    时间: 2014-11-7 12:47

本帖最后由 867258173 于 2014-11-7 12:49 编辑

回复 9# apang
谢大神,已成功
作者: hnldwhm52    时间: 2014-11-9 17:32

xuexixiexie!!!!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2