Board logo

标题: [注册表类] reg query 表示与或非关系? [打印本页]

作者: tiandyoin    时间: 2023-9-8 09:10     标题: reg query 表示与或非关系?

本帖最后由 tiandyoin 于 2023-9-8 09:11 编辑

reg query 的选项 /v [/f [/d /k]] 一直让我很迷惑?

当我正想确定 /v 与 /f 是‘与’关系,表示‘且’。却找到下面的反例
  1. C:\>reg query "HKEY_CURRENT_USER\1"  /v "*test*" /s /f "Mouse" /k /d
  2. HKEY_CURRENT_USER\1
  3.     testExpandsz    REG_EXPAND_SZ    "Mouse without Borders"
  4.     testbinary    REG_BINARY    4D006F00750073006500200077006900740068006F0075007400200042006F00720064006500720073000000
  5.     testco&product    REG_SZ    Microsoft Garage Mouse without Borders
  6.     test!%    REG_SZ    Microsoft Garage %%% !!!
  7.     MyTestHex    REG_BINARY    4D006900630072006F0073006F006600740020004700610072006100670065004D006F00750073006500200077006900740068006F0075007400200042006F0072006400650072007300000
  8. HKEY_CURRENT_USER\1\Mouse without Borders2
  9.     testExpandsz    REG_EXPAND_SZ    Mouse without Borders
  10.     testHex    REG_BINARY    FFFE4D006F00750073006500200077006900740068006F0075007400200042006F00720064006500720073000000
  11. 搜索结束: 找到 7 匹配。
复制代码
如上:
  1. test!%    REG_SZ    Microsoft Garage %%% !!!
复制代码
这一句项名称和数据并没有出现 Mouse。
/v 这个开关的很为很是奇怪,有时表示且,有时表示或?
作者: Batcher    时间: 2023-9-8 09:38

回复 1# tiandyoin


没有看到什么证据说它是“且”

微软官网的语法:
  1. reg query <keyname> [{/v <valuename> | /ve}] [/s] [/se <separator>] [/f <data>] [{/k | /d}] [/c] [/e] [/t <Type>] [/z] [/reg:32] [/reg:64]
复制代码
/v <valuename>        指定要查询的注册表值名称。 如果省略,则返回 keyname 的所有值名称。 如果还使用 /f 选项,则此参数的 Valuename 是可选的。
/f <data>        指定要搜索的数据或模式。 如果字符串包含空格,请使用双引号。 如果未指定,则使用通配符 (*) 作为搜索模式。
作者: tiandyoin    时间: 2023-9-8 10:43

本帖最后由 tiandyoin 于 2023-9-27 12:25 编辑

回复 2# Batcher
  1.            /v 与 /f 开关必须存在一个。
  2.            注意:
  3.               /k /d     是 /f 的次级开关。             表示“或”关系 /k ∪ /d,       单独一个 /f = /f /d /k, 所以一般省略掉。
  4.            /v /k        二者同时存在(没有 /s 或 /d), 表示互斥关系  /k ∩ /v = ф      空集,将无法查找到任何结果。
  5.            /v /k /d     三者同时存在(没有 /s),       表示“或”关系       /v ∪ /d,  忽略无效的 /k 开关,合并所有找到结果。
  6.            /v /k    /s  三者同时存在(没有       /d), 表示“且”关系 /k ∩ {/v /s},    即查找某名称为XX的子项中的某名称为YY的值。
  7.            /v /k /d /s  四者同时存在,                 表示“或”关系(/k ∩ {/v /s}) ∪ (/v ∪ /d),合并以上两者找到的结果。
  8.            /t 预计与 /d 逻辑一样(不完全测试):
  9.            /v /k /d /t /s  五者同时存在,              表示“或”关系(/k ∩ {/v /s}) ∪ (/v ∪ /d ∪ /t),合并以上两者找到的结果。
  10.            
复制代码
我自己推测是这样的,/d 是独立条件,只要查找数据有XX,就会输出。
/k 独立一个选项能查,
/k 联合其它选项情况有点复杂。
测试用例不多,还不好下定论。




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