[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】sed.exe替换字符,还能够精简吗?谢谢

本帖最后由 yyz219 于 2025-3-15 10:14 编辑

完美解决了:
方法1
::去 SID(任意位数的 SID 都适用)
  1. sed.exe -i -E "s/HKEY_USERS\\S-1-5-21[^\\]*\\/HKEY_CURRENT_USER\\/g" "%注册表文件路径%"
复制代码
方法2
  1. ::去 SID(任意位数的 SID 都适用)【S-1-5-21后面由 “数字” 和 “-” 号组成,由此用:[0-9\-]】
  2. sed -i -E "s/HKEY_USERS\\S-1-5-21[0-9\-]*\\/HKEY_CURRENT_USER\\/g" "%注册表文件路径%"
复制代码
=================================================================
成品.bat
:
  1. :【自动去 sid(拖动)】【转换成的(.reg)是(ANSI 编码)】
  2. @echo off
  3. ::=============================================================================================
  4. ::【双击退出,拖运行】
  5. if "%~1"=="" exit /b 3
  6. ::=============================================================================================
  7. set 注册表文件路径=%~1
  8. ::=============================================================================================
  9. ::【检测 “关键字”:HKEY_USERS\S-1-5-21(有跳到:D,无跳到:C)】
  10. type "%注册表文件路径%"|findstr "HKEY_USERS\S-1-5-21" >nul 2>&1
  11. if %errorlevel% equ 0 (goto :D) else goto :C
  12. :C
  13. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. %【留下 10个 空行】%
  14. echo                                  不需要替换
  15. pause>nul
  16. exit
  17. :D
  18. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. %【留下 10个 空行】%
  19. echo                                   要替换吗?
  20. pause>nul
  21. ::=============================================================================================
  22. ::【转为:ANSI 编码(才不乱码)】
  23. (type "%注册表文件路径%" &echo.;需有中文)>>"ANSI.#" &move /y "ANSI.#" "%注册表文件路径%">nul
  24. ::=============================================================================================
  25. ::去 SID(任意位数的 SID 都适用)【S-1-5-21后面由 “数字” 和 “-” 号组成,由此用:[0-9\-]】
  26. sed -i -E "s/HKEY_USERS\\S-1-5-21[0-9\-]*\\/HKEY_CURRENT_USER\\/g" "%注册表文件路径%"
  27. exit
复制代码
===============================
原来的问题:
sed.exe替换字符,还能够精简吗?谢谢
========================
sed.exe替换字符.bat
这些代码能够使用。但是,觉得行数有一点多,不知道能不能减少?
::【自动去 sid】
@echo off
... ...
::====================================================================
::去 "注册表文件"中的SID(数字和 “.” 的位数  要等于sid的位数  不等于就不会处理)(下面sid-40~48位适用
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21.................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21..................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21...................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21....................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21.....................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21......................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21.......................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"
sed.exe -i -E -e "s/HKEY_USERS\\S-1-5-21........................................\\/HKEY_CURRENT_USER\\/g"  "%注册表文件路径%"

exit
====================================================================
这些代码能够使用。但是,觉得行数有一点多,不知道能不能减少?
贴个注册表文件,供测试

Windows Registry Editor Version 5.00

[HKEY_USERS\S-1-5-21-2765962963-2952424663-14726149-500\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband]
[HKEY_CURRENT_CONFIG\Software\Fonts]
"LogPixels"=dword:00000060
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
我是小白,希望老师多多帮助

代码精简不清楚,不过注册表的五大根键名,可以采用缩写,如下
HKEY_LOCAL_MACHINE    简写HKLM
HKEY_CURRENT_USER     简写HKCU
HKEY_CLASSES_ROOT     简写HKCR
HKEY_USERS                  简写HKU
HKEY_CURRENT_CONFIG 简写HKCC
1

评分人数

TOP

回复 2# fzp070


    谢谢
我是小白,希望老师多多帮助

TOP

本帖最后由 aloha20200628 于 2025-3-14 13:09 编辑

回复 1# yyz219

假设被替换的32-40字符链仅由数字和.构成
  1. sed -E "s/HKEY_USERS\\S-1-5-21[0-9\.]{32,40}\\/HKEY_CURRENT_USER\\/ig" "%注册表文件路径%"
复制代码
【修改注册表须谨慎】
1

评分人数

TOP

回复 4# aloha20200628


    我试一试先 谢谢
我是小白,希望老师多多帮助

TOP

回复 4# aloha20200628

不成功(没有进行替换)
我是小白,希望老师多多帮助

TOP

贴个注册表文件,供测试

Windows Registry Editor Version 5.00

[HKEY_USERS\S-1-5-21-2765962963-2952424663-14726149-500\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband]
[HKEY_CURRENT_CONFIG\Software\Fonts]
"LogPixels"=dword:00000060
我是小白,希望老师多多帮助

TOP

本帖最后由 aloha20200628 于 2025-3-14 19:32 编辑

回复 7# yyz219

提供的样本文件中的 32-40字符链包含的不是.字符而是-字符,故4楼代码须订正如下
  1. sed -E "s/HKEY_USERS\\S-1-5-21[0-9\.\-]{32,40}\\/HKEY_CURRENT_USER\\/ig" "%注册表文件路径%"
复制代码
如果要被替换的这段32-40字符链仅包含数字和.-这两个非数值字符,亦可用以下代码,其自动兼容 1-n 个字符长度...
  1. sed -E "s/HKEY_USERS\\S-1-5-21[0-9\.\-]+\\/HKEY_CURRENT_USER\\/ig" "%注册表文件路径%"
复制代码
1

评分人数

TOP

回复 8# aloha20200628


    一样不行(没有替换),是不是跟“S-1-5-21”————有一个“S”有关系
我是小白,希望老师多多帮助

TOP

回复 9# yyz219

代码中匹配的是 S-1-5-21 其后的 -2765962963-2952424663-14726149-500 字符链,我测试没有问题。

TOP

  1. sed.exe -i -E "s/HKEY_USERS\\S-1-5-21[^\\]*\\/HKEY_CURRENT_USER\\/g" "%注册表文件路径%"
复制代码
1

评分人数

TOP

回复 10# aloha20200628


    代码是什么?
我是小白,希望老师多多帮助

TOP

回复 11# smss

我试一试 谢谢
我是小白,希望老师多多帮助

TOP

回复 11# smss


    成功了,再次感谢
我是小白,希望老师多多帮助

TOP

回复 12# yyz219

直接在命令行测试以下这行,看看是啥结果?
  1. C:\temp>echo,[HKEY_USERS\S-1-5-21-2765962963-2952424663-14726149-500\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband]|sed -E "s/HKEY_USERS\\S-1-5-21[0-9\.\-]+\\/HKEY_CURRENT_USER\\/ig"
复制代码

TOP

返回列表