找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 12023|回复: 10

[注册表类] 批处理如何查找注册表 hex(2) 值?

[复制链接]
发表于 2024-12-23 20:57:59 | 显示全部楼层 |阅读模式
本帖最后由 tiandyoin 于 2024-12-24 10:01 编辑

想用 findstr 找出注册表的 hex(2) 值,自己研究一夜的式子,但未能适用所有情况:

  1. rem 把 '"' 双引号加反斜杠去掉
  2. set "$=!line:"=!"
  3. rem 查找 形式如 @=hex(2):... 或 ""=hex(2):.. 或 "..."=hex(2):
  4. cd.&echo;!$!!$!| >nul findstr /i/r /c:"^[         ]*@[         ]*=[         ]*hex(2):" /c:"^[         ]*""[^"]*""[         ]*=[         ]*hex^(2^):"
复制代码
用例:


  1. [HKEY_CURRENT_USER\tiandyoin\test18]
  2. @=hex(2):25,00,30,00,24,00,00,00
  3. ""=hex(2):25,00,30,00,24,00,00,00
  4. "@"=hex(2):25,00,30,00,24,00,\
  5.   00,00
  6. "normal"=hex(2):25,00,30,00,24,00,00,00
  7. "hello         world"=hex(2):25,00,30,00,24,00,00,00
  8. """=hex(2):25,00,30,00,24,00,00,00
  9. ""abc""=hex(2):25,00,30,00,24,00,00,\
  10.   00
  11. "hello world\\\\\\""=hex(2):25,00,30,00,24,00,00,00
  12. "A \\B        \\ C\"=hex(2):00,00
  13. "A="B"=hex(2):22,00,25,00,53,00,79,00,73,00,74,00,00,00
  14. "A="=hex(2):"=hex(2):22,00,25,00,53,00,79,00,73,00,74,00,00,00

复制代码
发表于 2024-12-23 21:27:08 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-12-24 18:19 编辑

回复 1# tiandyoin

  1. findstr /i "[0-9a-f][0-9a-f,\\]*$" "hex2.txt"
复制代码
 楼主| 发表于 2024-12-24 09:57:00 | 显示全部楼层
本帖最后由 tiandyoin 于 2024-12-24 10:08 编辑

回复 2# aloha20200628


    (1) 你想当然了, findstr 不是按 ASCII 码排序的, [0-9A-Za-z] 不是你想要的样子。
而且注册表值,允许任何字符,只要转义反斜杠和双引号就行
   (2) ".."=hex:11,22,33,44,\
        ".."=hex(7):11,22,33
       这些你都没想到吧,我列了很多例子,你也没仔细看
 楼主| 发表于 2024-12-24 10:12:14 | 显示全部楼层
本帖最后由 tiandyoin 于 2024-12-24 10:16 编辑

回复 2# aloha20200628
  1.    
  2. * 重复的范围是 [0-9a-z,\\]  还是 [0-9a-z][0-9a-z,\\] ?
复制代码
发表于 2024-12-24 11:43:50 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-12-24 18:22 编辑

回复 3# tiandyoin

一。findstr 的正则匹配能力很弱,量词只有 *,更没有分组/环视/...等精细匹配模式,而且其返回的匹配结果是整行而非字段,因此只能用其瞄准行内关键词
二。楼主题目中明确指定是 hex(2) 数列,故其特征字符就是不区分大小写的 [0-9a-f,\\]
三。因为 findstr 不支持量词 + 故须采用 [0-9a-f,] 重复匹配
发表于 2024-12-24 14:27:59 | 显示全部楼层
echo a| >nul find "a" 如此,把find的结果 >nul ,怎么会有结果?
 楼主| 发表于 2024-12-24 16:28:30 | 显示全部楼层
回复 6# 77七


    不要去讨论些不重要的问题,后面根据 if errorlevel 就可以判断。
   我问的问题是要写一个通用的正则表达式
 楼主| 发表于 2024-12-24 16:30:08 | 显示全部楼层
回复 5# aloha20200628


    你都说不能分组了,使用*就只能匹配最后一个字符,你的方案是行不通的
 楼主| 发表于 2024-12-24 16:33:32 | 显示全部楼层
本帖最后由 tiandyoin 于 2024-12-24 17:08 编辑

  1.                 set "$=!line:\\=!"
  2.                 set "$=!$:"=!"
  3.                 cd.&echo;!$!!$!| >nul findstr /i /r /c:"^[         ]*@[         ]*=[         ]*hex(2):" /c:"^[         ]*""[^"]*""[         ]*=[         ]*hex^(2^):"
复制代码
我自己解决了,不过式子挺长的,而且双引号不成对,findstr 命令后面不能再加东西了

  1. rem 这式子比较粗略吧,不过只要最后一个字符不是双引号,基本就匹配 hex(2) 串了
  2. cd.&echo;!line!!line!| >nul findstr /i /r /c:"=hex(2):[0-9a-f][0-9a-f ,\\]*$"
复制代码
要匹配空格,得加 /r /c
发表于 2024-12-24 17:54:11 | 显示全部楼层
=hex(2):
含有该字符串的哪些行需要排除?这个问题不知道是否重要?
发表于 2024-12-24 19:18:06 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-12-24 19:37 编辑

回复 8# tiandyoin

复查了一遍,若将一楼的示例数据存为 hex2.txt(须保留文件末尾有一空行否则最后一行 hex 数据会被遗漏),用以下一行流代码即可全部匹配出各行的 hex(2) 数据...

  1. findstr /i "[0-9a-f][0-9a-f,\\]*$" "hex2.txt"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 15:22 , Processed in 0.020572 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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