无忧启动论坛

标题: 注册表指定项下所有包含指定字符串的键值修改为另一指定字符串 [打印本页]

作者: houxiren    时间: 2024-3-13 08:27
标题: 注册表指定项下所有包含指定字符串的键值修改为另一指定字符串
本帖最后由 houxiren 于 2024-3-13 16:29 编辑

感谢10楼 hua_wuxin 前辈,完美解决。

reg query "HKEY_CLASSES_ROOT\*\shell" /s
以上查询代码返回以下结果
HKEY_CLASSES_ROOT\*\shell\DeleteBuildEmpty
    (默认)    REG_SZ    删除空文件
    Icon    REG_SZ    E:\1\1.exe

HKEY_CLASSES_ROOT\*\shell\DeleteBuildEmpty\command
    (默认)    REG_SZ    cmd.exe /c ""E:\Software\2\2.exe" "%1"&&type NUL > "%1"

HKEY_CLASSES_ROOT\*\shell\EverythingSearch
    (默认)    REG_SZ    Everything搜索
    Icon    REG_SZ    E:\Software\Everything\Everything.exe

HKEY_CLASSES_ROOT\*\shell\EverythingSearch\command
    (默认)    REG_SZ    "E:\Software\Everything\EverythingSearchLikeThisFile.bat" "%1"

如何把健值中的“E:\Software”替换为“D:\Software”,修改结果如下,(备注:如果可以的话,不要用导出reg文件,修改reg文件再导入的方法。)感谢帮助

HKEY_CLASSES_ROOT\*\shell\DeleteBuildEmpty
    (默认)    REG_SZ    删除空文件
    Icon    REG_SZ    E:\1\1.exe

HKEY_CLASSES_ROOT\*\shell\DeleteBuildEmpty\command
    (默认)    REG_SZ    cmd.exe /c ""D:\Software\2\2.exe" "%1"&&type NUL > "%1"

HKEY_CLASSES_ROOT\*\shell\EverythingSearch
    (默认)    REG_SZ    Everything搜索
    Icon    REG_SZ    D:\Software\Everything\Everything.exe

HKEY_CLASSES_ROOT\*\shell\EverythingSearch\command
    (默认)    REG_SZ    "D:\Software\Everything\EverythingSearchLikeThisFile.bat" "%1"



作者: aigpt    时间: 2024-3-13 08:41
回复下载 感谢分享
作者: nttwqz    时间: 2024-3-13 08:43
楼主如果没有批量处理需求, 大可不必编写批处理,能达到目的就好,RegWorkShop就支持这种替换。
作者: yuguotqing    时间: 2024-3-13 08:56
感谢分享
作者: hehuiying    时间: 2024-3-13 09:13
帮顶
作者: houxiren    时间: 2024-3-13 09:27
nttwqz 发表于 2024-3-13 08:43
楼主如果没有批量处理需求, 大可不必编写批处理,能达到目的就好,RegWorkShop就支持这种替换。

前辈,好。多次得你帮助,再次感谢。RegWorkShop替换我会。

确实是想学习批处理替换。望指导。
作者: zlq_hysy    时间: 2024-3-13 09:41
等高手出手
作者: 9zhmke    时间: 2024-3-13 09:57
本帖最后由 9zhmke 于 2024-3-13 10:03 编辑

你说的替换路径这种事情,经常会在绿化过程中遇到,我弄的这个PDF中的段落给你参考下:其中,PDFXEdit.reg是在安装过程中跟踪下来的注册表变化,变量p替换当前路径中的单斜杠为双斜杠。
关键步骤:set "a=!a:C:\\Program Files (x86)\\Tracker Software\\PDF Viewer=%p%!"
这里使用批处理中的替换功能把原目录字符串替换成变量p中的文件夹
  1. setlocal enabledelayedexpansion
  2. del tmp.reg 2>nul
  3. set p=%cd:\=\\%
  4. for /f "tokens=*" %%i in ('type PDFXEdit.reg') do (
  5.     set a=%%i
  6.     set "a=!a:C:\\Program Files (x86)\\Tracker Software\\PDF Viewer=%p%!"
  7.     echo !a! >>tmp.reg
  8.     )
复制代码


作者: houxiren    时间: 2024-3-13 10:05
9zhmke 发表于 2024-3-13 09:57
你说的替换路径这种事情,经常会在绿化过程中遇到,我弄的这个PDF中的段落给你参考下:其中,PDFXEdit.reg ...

感谢帮助。可否不用 reg 文件的方式,并给出成品代码?我应变水平不够。再次感谢!~
作者: hua_wuxin    时间: 2024-3-13 11:30
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2,*" %%I in ('reg query "HKEY_CLASSES_ROOT\*\shell" /s') do (
  set value=%%I
  set type=%%J
  set data=%%K
  
  if /i "!value:~0,5!"=="HKEY_" (
    set key=!value!
  ) else (
    if not "!data!"=="" (
      set newdata=!data:E:\Software=D:\Software!
      if not "!newdata!"=="!data!" (
        ::将数据中的"替换为\"以免reg add时被胡乱匹配
        set newdata=!newdata:"=\"!
        if "!value!"=="(默认)" (
          reg add "!key!" /ve          /t !type! /d "!newdata!" /f
        ) else (
          reg add "!key!" /v "!value!" /t !type! /d "!newdata!" /f
        )
      )
    )
  )
)
作者: ppll2030    时间: 2024-3-13 12:24
本帖最后由 ppll2030 于 2024-3-13 12:32 编辑

如果楼主是要做一键绿化的话,还是用批处理调用reg文件导入来的便捷。
批处理直接处理注册表的代码相对繁琐,不够直观,而且转换很是麻烦。
而reg文件查看方便,用文本替换或是批处理修改都相对更加简单方便。
根据你的提供的两段,给你转成bat。对比一下就知道了。
reg add "HKEY_CLASSES_ROOT\*\shell\DeleteBuildEmpty" /f /ve /t REG_SZ /d "删除空文件"
reg add "HKEY_CLASSES_ROOT\*\shell\DeleteBuildEmpty" /f /v "Icon" /t REG_SZ /d "E:\1\1.exe"
reg add "HKEY_CLASSES_ROOT\*\shell\DeleteBuildEmpty\command" /f /ve /t REG_SZ /d "cmd.exe /c ""D:\Software\2\2.exe"\" \"%%1\"&&type NUL > "\"%%1\"

reg add "HKEY_CLASSES_ROOT\*\shell\EverythingSearch" /f /ve /t REG_SZ /d "Everything搜索"
reg add "HKEY_CLASSES_ROOT\*\shell\EverythingSearch" /f /v "Icon" /t REG_SZ /d "D:\Software\Everything\Everything.exe"
reg add "HKEY_CLASSES_ROOT\*\shell\EverythingSearch\command" /f /ve /t REG_SZ /d "\"D:\Software\Everything\EverythingSearchLikeThisFile.bat\" \"%%1\"


作者: 9zhmke    时间: 2024-3-13 14:24
houxiren 发表于 2024-3-13 10:05
感谢帮助。可否不用 reg 文件的方式,并给出成品代码?我应变水平不够。再次感谢!~

reg add的速度慢很多,可以考虑下使用reg
作者: houxiren    时间: 2024-3-13 16:14
ppll2030 发表于 2024-3-13 12:24
如果楼主是要做一键绿化的话,还是用批处理调用reg文件导入来的便捷。
批处理直接处理注册表的代码相对繁 ...

感谢您。主要是要学习查找-替换,目标键值是不确定的,你的写法是针对确定键值的,不适用。再次感谢。
作者: houxiren    时间: 2024-3-13 16:15
9zhmke 发表于 2024-3-13 14:24
reg add的速度慢很多,可以考虑下使用reg

不考虑速度方面,可否帮写下代码?感谢。
作者: houxiren    时间: 2024-3-13 16:15
hua_wuxin 发表于 2024-3-13 11:30
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2,*" %%I in ('reg query "HKEY_CLASSES_R ...

感谢您,马上试用。回头再汇报。
作者: houxiren    时间: 2024-3-13 16:27
hua_wuxin 发表于 2024-3-13 11:30
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2,*" %%I in ('reg query "HKEY_CLASSES_R ...

感谢您!完美解决。感谢!!!~~
作者: crt1024x768    时间: 2024-3-16 12:54
好像很厉害的样子 看看
作者: banxiafy    时间: 2024-3-16 18:46
谢谢分享
作者: hehuiying    时间: 2024-3-31 20:53
谢谢分享




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