无忧启动论坛

标题: 从文本中提取字符串 [打印本页]

作者: 2011xiaobing    时间: 2013-5-5 20:42
标题: 从文本中提取字符串
本帖最后由 2011xiaobing 于 2013-5-5 21:18 编辑

有一文本:
HKEY_LOCAL_MACHINE\myapp\Classes\ActivatableClasses\Package\winstore_1.0.0.0_neutral_neutral_cw5n1h2txyewy\Server\Windows.Store 2013/04/02 11:52
  ExePath = C:\Windows\System32\WWAHost.exe.
HKEY_LOCAL_MACHINE\myapp\Classes\AppID\{534A1E02-D58F-44f0-B58B-36CBED287C7C} 2013/04/02 11:52
  DllSurrogate = C:\Windows\System32\prevhost.exe.
HKEY_LOCAL_MACHINE\myapp\Classes\AppID\{E15FBAC2-C276-4523-92CA-561456EBCF3E} 2013/04/02 11:52
  DllSurrogate = C:\Windows\System32\PrintDialogHost.exe.
HKEY_LOCAL_MACHINE\myapp\Classes\Application.Manifest 2013/04/02 11:52
  FriendlyTypeName = @C:\Windows\System32\dfshim.dll,-200.
HKEY_LOCAL_MACHINE\myapp\Classes\Application.Manifest\DefaultIcon 2013/04/02 11:52
  ? = C:\Windows\System32\dfshim.dll,1.
HKEY_LOCAL_MACHINE\myapp\Classes\Application.Manifest\shell\open\command 2013/04/02 11:52
  ? = "C:\Windows\System32\rundll32.exe" "C:\Windows\System32\dfshim.dll",Sh...
HKEY_LOCAL_MACHINE\myapp\Classes\Application.Reference 2013/04/02 11:52
  FriendlyTypeName = @C:\Windows\System32\dfshim.dll,-201.
HKEY_LOCAL_MACHINE\myapp\Classes\Application.Reference\shell\open\command 2013/04/02 11:52
  ? = "C:\Windows\System32\rundll32.exe" "C:\Windows\System32\dfshim.dll",Sh...
HKEY_LOCAL_MACHINE\myapp\Classes\Applications\iexplore.exe\shell\open\command 2013/04/02 11:52
  ? = "C:\Program Files\Internet Explorer\iexplore.exe" %1.
HKEY_LOCAL_MACHINE\myapp\Classes\CLSID\21690A61-3629-4E3B-A72D-BBC8A88DB81F 2013/04/02 11:52
  LocalizedString = @C:\Windows\System32\wuapi.dll,-63528.
HKEY_LOCAL_MACHINE\myapp\Classes\CLSID\{0000002F-0000-0000-C000-000000000046}\InprocServer32 2013/04/02 11:52
  ? = C:\Windows\System32\oleaut32.dll.
HKEY_LOCAL_MACHINE\myapp\Classes\CLSID\{00000507-0000-0010-8000-00AA006D2EA4}\InprocServer32 2013/04/02 11:52
  ? = C:\Program Files\Common Files\System\ado\msado15.dll.
HKEY_LOCAL_MACHINE\myapp\Classes\CLSID\{0000050B-0000-0010-8000-00AA006D2EA4}\InprocServer32 2013/04/02 11:52
  ? = C:\Program Files\Common Files\System\ado\msado15.dll.
HKEY_LOCAL_MACHINE\myapp\Classes\CLSID\{00000514-0000-0010-8000-00AA006D2EA4}\InprocServer32 2013/04/02 11:52
  ? = C:\Program Files\Common Files\System\ado\msado15.dll.
HKEY_LOCAL_MACHINE\myapp\Classes\CLSID\{00000535-0000-0010-8000-00AA006D2EA4}\InprocServer32 2013/04/02 11:52
  ? = C:\Program Files\Common Files\System\ado\msado15.dll.
HKEY_LOCAL_MACHINE\myapp\Classes\CLSID\{00000541-0000-0010-8000-00AA006D2EA4}\InprocServer32 2013/04/02 11:52
  ? = C:\Program Files\Common Files\System\ado\msado15.dll.
HKEY_LOCAL_MACHINE\myapp\Classes\CLSID\{00000542-0000-0010-8000-00AA006D2EA4}\InprocServer32 2013/04/02 11:52
  ? = C:\Program Files\Common Files\System\ado\msado15.dll.
HKEY_LOCAL_MACHINE\myapp\Classes\CLSID\{00000560-0000-0010-8000-00AA006D2EA4}\InprocServer32 2013/04/02 11:52
  ? = C:\Program Files\Common Files\System\ado\msado15.dll.
HKEY_LOCAL_MACHINE\myapp\Classes\CLSID\{00000566-0000-0010-8000-00AA006D2EA4}\InprocServer32 2013/04/02 11:52
  ? = C:\Program Files\Common Files\System\ado\msado15.dll.
HKEY_LOCAL_MACHINE\myapp\Classes\CLSID\{00000602-0000-0010-8000-00AA006D2EA4}\InprocServer32 2013/04/02 11:52
。。。。。。。。。。。。。。。。。。。。。
======================================================
要求:
提取出这样的字符串:
HKEY_LOCAL_MACHINE\myapp\Classes\ActivatableClasses\Package\winstore_1.0.0.0_neutral_neutral_cw5n1h2txyewy\Server\Windows.Store

HKEY_LOCAL_MACHINE\myapp\Classes\AppID\{534A1E02-D58F-44f0-B58B-36CBED287C7C}
HKEY_。。。。。
HKEY_。。。。。
HKEY_LOCAL_MACHINE\myapp\Classes\CLSID\{0000002F-0000-0000-C000-000000000046}\InprocServer32
。。。。。。。。。。

存入一文本中
当然,能把这些从注册表导出为一个注册表文件更好!

谢谢谢谢!!!!!!

作者: dos时代菜鸟    时间: 2013-5-6 11:57
本帖最后由 dos时代菜鸟 于 2013-5-6 12:01 编辑

大致如下:

找出 x.txt 中 包含 HKEY_LOCAL_MACHINE 的语句的第一部分。

for /f "tokens=1 delims= " %c in ('find "HKEY_LOCAL_MACHINE" /i  x.txt') do echo %c



作者: 2011xiaobing    时间: 2013-5-6 22:00
本帖最后由 2011xiaobing 于 2013-5-6 22:02 编辑

谢谢尊敬的 dos时代菜鸟 大师!!!
按大师指导,第一问题已完美解决。谢谢!
但导出注册表还没搞定,还想敬请大师出手!

HKEY_LOCAL_MACHINE\org-Soft\Classes\ActivatableClasses\Package\winstore_1.0.0.0_neutral_neutral_cw5n1h2txyewy\Server\Windows.Store
HKEY_LOCAL_MACHINE\org-Soft\Classes\AppID\{534A1E02-D58F-44f0-B58B-36CBED287C7C}
HKEY_LOCAL_MACHINE\org-Soft\Classes\AppID\{E15FBAC2-C276-4523-92CA-561456EBCF3E}
HKEY_LOCAL_MACHINE\org-Soft\Classes\Application.Manifest
HKEY_LOCAL_MACHINE\org-Soft\Classes\Application.Manifest\DefaultIcon
HKEY_LOCAL_MACHINE\org-Soft\Classes\Application.Manifest\shell\open\command
HKEY_LOCAL_MACHINE\org-Soft\Classes\Application.Reference
HKEY_LOCAL_MACHINE\org-Soft\Classes\Application.Reference\shell\open\command
HKEY_LOCAL_MACHINE\org-Soft\Classes\Applications\iexplore.exe\shell\open\command
HKEY_LOCAL_MACHINE\org-Soft\Classes\CLSID\21690A61-3629-4E3B-A72D-BBC8A88DB81F
HKEY_LOCAL_MACHINE\org-Soft\Classes\CLSID\{0000002F-0000-0000-C000-000000000046}\InprocServer32
HKEY_LOCAL_MACHINE\org-Soft\Classes\CLSID\{00000507-0000-0010-8000-00AA006D2EA4}\InprocServer32
HKEY_LOCAL_MACHINE\org-Soft\Classes\CLSID\{0000050B-0000-0010-8000-00AA006D2EA4}\InprocServer32
HKEY_LOCAL_MACHINE\org-Soft\Classes\CLSID\{00000514-0000-0010-8000-00AA006D2EA4}\InprocServer32
作者: 2011xiaobing    时间: 2013-5-6 22:48
本帖最后由 2011xiaobing 于 2013-5-6 23:32 编辑

长话短说:我本想从注册表把含有字符 “C:\ ” 导出为:

。。。。。。。。。
[HKEY_LOCAL_MACHINE\org-SOFT\Classes\AppID\{E15FBAC2-C276-4523-92CA-561456EBCF3E}]
"DllSurrogate"="C:\\Windows\\System32\\PrintDialogHost.exe"

[HKEY_LOCAL_MACHINE\org-SOFT\Classes\Application.Manifest]
"FriendlyTypeName"="@C:\\Windows\\System32\\dfshim.dll,-200"

[HKEY_LOCAL_MACHINE\org-SOFT\Classes\Application.Manifest\DefaultIcon]
@="C:\\Windows\\System32\\dfshim.dll,1"

[HKEY_LOCAL_MACHINE\org-SOFT\Classes\Application.Manifest\shell\open\command]
@="\"C:\\Windows\\System32\\rundll32.exe\" \"C:\\Windows\\System32\\dfshim.dll\",ShOpenVerbApplication %1"

[HKEY_LOCAL_MACHINE\org-SOFT\Classes\Application.Reference]
"FriendlyTypeName"="@C:\\Windows\\System32\\dfshim.dll,-201"
。。。。。。。。
但用软件导出却成了一楼的造型,显然不是我要的。
敬请大师指导,怎样导出我需要的注册表!
谢谢!
作者: dos时代菜鸟    时间: 2013-5-7 10:35
用 registry workshop 查找并导出
作者: 2011xiaobing    时间: 2013-5-7 13:34
本帖最后由 2011xiaobing 于 2013-5-7 13:40 编辑

嘿嘿,大师果然厉害!
上面4楼正是用registry workshop软件手工导出的。
我现在想用CMD搞定。盼望大师指点高招!!!
作者: dos时代菜鸟    时间: 2013-5-8 10:35
本帖最后由 dos时代菜鸟 于 2013-5-8 10:38 编辑

注册表 中 好像 只有 当 \ 两侧任意一侧存在有  " 的时候 才 单独 出现 ,否则 都是  \\
如果我的假设 成立,就可一用 set 命令的替换功能搞定 。

如果我的假设成立
你 一楼 的 结果 中 可以把  所有 \ 替换成 \\
然后再    把所有  "\\  替换成 "\,把所有  \\"  替换成 \"
作者: zhaoyuxing    时间: 2013-5-8 13:26
换作我就直接用vbs去搞了,命令行可能有些不太方便
作者: 2011xiaobing    时间: 2013-5-8 16:04
dos时代菜鸟 发表于 2013-5-8 10:35
注册表 中 好像 只有 当 \ 两侧任意一侧存在有  "  的时候 才 单独 出现 ,否则 都是  \\
如果我的假设 成 ...


感谢 dos时代菜鸟 大师指导!!!
我试试看。
作者: 2011xiaobing    时间: 2013-5-8 16:08
zhaoyuxing 发表于 2013-5-8 13:26
换作我就直接用vbs去搞了,命令行可能有些不太方便

vbs也行!但我对vbs 不熟。能否有劳大驾指导一下?先谢!
作者: pznpt    时间: 2013-5-8 23:13
本帖最后由 pznpt 于 2013-5-9 09:26 编辑

在HKEY_LOCAL_MACHINE\SOFTWARE\ACD Systems中,提取数据包含字串C:\的项,是这个意思吗?
bat试了一下,findstr不争气,提示错误"xx行太长"。整一个vbs试一下
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set ws = CreateObject("WScript.Shell")
  3. Tmp = ws.ExpandEnvironmentStrings("%temp%")

  4. ws.Run "cmd /creg export ""HKLM\SOFTWARE\ACD Systems"" """&Tmp&"\$$.reg""",0,True

  5. Set file = fso.OpenTextFile(Tmp & "\$$.reg",1,,-1)
  6. Do Until file.AtEndOfStream
  7.    a = file.ReadLine
  8.    If UCase(Left(a,20)) = "[HKEY_LOCAL_MACHINE" Then b = Mid(a,2,Len(a)-2)
  9.    If InStr(UCase(a),"C:") <> 0 Then
  10.       If InStr(UCase(str),UCase(b)&vbCrLf) = 0 Then
  11.          str = str & b & vbCrLf
  12.       End If
  13.    End If
  14. Loop

  15. file.Close : Set file = Nothing
  16. fso.CreateTextFile("Result.txt",True).Write str
  17. fso.DeleteFile Tmp & "\$$.reg"

  18. MsgBox "OK"
复制代码
WinXP的reg export 没有 /y开关,改一下
作者: zhaoyuxing    时间: 2013-5-9 12:06
2011xiaobing 发表于 2013-5-8 16:08
vbs也行!但我对vbs 不熟。能否有劳大驾指导一下?先谢!

用vbs里的filesystemobject读取整篇文本,用replace语句逐行替改也行,用正则通篇替改也行
作者: 2011xiaobing    时间: 2013-5-9 12:30
本帖最后由 2011xiaobing 于 2013-5-9 12:58 编辑

再次感谢 pznpt 大师!
原委:
本人想将一注册表里所有的字符"C:\" 全部替换成"X:\"。
承蒙大师不厌其烦,谆谆教诲。本人感激之情,难于言表。
本以为已经解决,后来发现修改结果不理想,还有大量字符没有替换。
只好自己,日夜折腾,几周下来,仍有一些字符没有替换,焦头烂额!
无奈之下,想用 REGFIND 来解决,仍无结果 !才发本贴求助。
在此请求大师:不论什么方法,只要能自动完成替换就行(不用人工干予)。谢谢! 谢谢!
现在只剩这几个没有替换:

c.rar

1.02 KB, 下载次数: 3, 下载积分: 无忧币 -2


作者: 2011xiaobing    时间: 2013-5-9 12:39
本帖最后由 2011xiaobing 于 2013-5-12 22:54 编辑
zhaoyuxing 发表于 2013-5-9 12:06
用vbs里的filesystemobject读取整篇文本,用replace语句逐行替改也行,用正则通篇替改也行


谢谢指导!
呵呵,关键是我不会VBS,愿闻其详!






欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3