无忧启动论坛

标题: 求一段批处理代码,查找指定注册表下的子项的值,如果指定的值为abc,则删除该项 [打印本页]

作者: 红毛樱木    时间: 2020-11-7 00:17
标题: 求一段批处理代码,查找指定注册表下的子项的值,如果指定的值为abc,则删除该项
比如
HKLM\SOFTWARE\dfsfsf
项下有如下几个子项
  1. SecurityHealth    REG_EXPAND_SZ    %windir%\system32\SecurityHealthSystray.exe
  2.     RTHDVCPL    REG_SZ    "C:\Program Files\Realtek\Audio\HDA\RtkNGUI64.exe" -s
  3.     IgfxTray    REG_SZ    "C:\Windows\system32\igfxtray.exe"
  4.     HotKeysCmds    REG_SZ    "C:\Windows\system32\hkcmd.exe"
  5.     Persistence    REG_SZ    "C:\Windows\system32\igfxpers.exe"
复制代码


查找到值为"C:\Windows\system32\igfxpers.exe"的项Persistence,删除该项HKLM\SOFTWARE\dfsfsf\Persistence

作者: plusv    时间: 2020-11-7 03:02
Test.bat
Test.png
Test.reg

OS: Windows 7 X64

Test.png (94.43 KB, 下载次数: 123)

Test.png

Test.rar

89.42 KB, 下载次数: 7, 下载积分: 无忧币 -2


作者: magicgenius    时间: 2020-11-7 08:09
@Echo Off
For /f "tokens=2,*" %%i in ('reg query "HKLM\SOFTWARE\dfsfsf" /v "Persistence"') do Set pt=%%j
if "%pt%" NEQ "C:\Windows\system32\igfxpers.exe"  goto end
reg delete "HKLM\SOFTWARE\dfsfsf" /v "Persistence" /f
:end
exit

红毛老大,看看这样行不?
作者: junyee    时间: 2020-11-7 08:20
  1. REM 方法1
  2. reg query "HKLM\SOFTWARE\dfsfsf"|findstr /C:" Persistence "|findstr /C:"C:\Windows\system32\igfxpers.exe" &&reg delete "HKLM\SOFTWARE\dfsfsf" /v "Persistence"

  3. REM 方法2,注意中括号内是 空格加TAB
  4. reg query "HKLM\SOFTWARE\dfsfsf"|findstr /R "^[         ]*Persistence.*[         ]*C:\\Windows\\system32\\igfxpers.exe" &&reg delete "HKLM\SOFTWARE\dfsfsf" /v "Persistence"
复制代码

作者: nttwqz    时间: 2020-11-7 10:51
pecmd你都能出教程了,这个你不会?
作者: 窄口牛    时间: 2020-11-7 10:57
感觉好像号被盗了
作者: 红毛樱木    时间: 2020-11-7 11:56
我真不会批处理,真的不会,没盗号
作者: 红毛樱木    时间: 2020-11-7 13:06
plusv 发表于 2020-11-7 03:02
Test.bat
Test.png
Test.reg

不是删dfsfsf,是删Persistence
作者: 红毛樱木    时间: 2020-11-7 13:11
junyee 发表于 2020-11-7 08:20

不是直接删Persistence,是找到值为"C:\Windows\system32\igfxpers.exe"的项,删掉该Persistence项。如果是sdfsfdsaf项,就删sdfsfdsaf项的意思。项不固定所以才想去找一下
作者: junyee    时间: 2020-11-7 13:44
本帖最后由 junyee 于 2020-11-7 13:47 编辑
红毛樱木 发表于 2020-11-7 13:11
不是直接删Persistence,是找到值为"C:\Windows\system32\igfxpers.exe"的项,删掉该Persistence项。如果 ...
  1. @echo off

  2. REM reg query HKLM\SOFTWARE\dfsfsf|findstr /C:"C:\Windows\system32\igfxpers.exe"

  3. REM 小心最好不要有空格
  4. set MK=HKLM\SOFTWARE\dfsfsf
  5. set kw=C:\Windows\system32\igfxpers.exe

  6. reg query "%MK%"|for /f  %%i in ( 'findstr /C:"%kw%"' ) do @(
  7.   echo [WARN]删除subkey:%%i
  8.   start /wait reg delete "%MK%" /v "%%i" /f
  9. )

  10. pause
复制代码


R.zip

814 Bytes, 下载次数: 3, 下载积分: 无忧币 -2

win7_x86 测试


作者: 红毛樱木    时间: 2020-11-7 13:48
junyee 发表于 2020-11-7 13:44

OK了,谢谢。我试试搞点复杂的看看
作者: 红毛樱木    时间: 2020-11-7 13:52
junyee 发表于 2020-11-7 13:44

"%SystemDrive%\Windows\System32\mshta.exe" vbscript:createobject("wscript.shell").run("""%SystemDrive%\Windows\run.bat"" h",0,true)(window.close)

大佬,注册表值是这种的,很长串的,好像不行,带很多特殊符号
作者: junyee    时间: 2020-11-7 13:57
红毛樱木 发表于 2020-11-7 13:52
"%SystemDrive%\Windows\System32\mshta.exe" vbscript:createobject("wscript.shell").run("""%SystemDr ...

你导出个 reg 我试试啊。

不过批处理处理一些特殊字符就麻烦些。


作者: 9zhmke    时间: 2020-11-7 14:04
红毛樱木 发表于 2020-11-7 13:52
"%SystemDrive%\Windows\System32\mshta.exe" vbscript:createobject("wscript.shell").run("""%SystemDr ...

看你这句话也在用VBS,如果环境允许运行VBS的话,那可以比批处理更高效地处理各种特殊符号
作者: 红毛樱木    时间: 2020-11-7 14:14
junyee 发表于 2020-11-7 13:57
你导出个 reg 我试试啊。

不过批处理处理一些特殊字符就麻烦些。

出来吃饭了,等下
作者: 红毛樱木    时间: 2020-11-7 14:15
9zhmke 发表于 2020-11-7 14:04
看你这句话也在用VBS,如果环境允许运行VBS的话,那可以比批处理更高效地处理各种特殊符号

这vbs学了两天才搞出来这个,还是不会太菜了
作者: junyee    时间: 2020-11-7 14:22
本帖最后由 junyee 于 2020-11-7 17:10 编辑
红毛樱木 发表于 2020-11-7 14:14
出来吃饭了,等下

注意 %号 要用 %% 转义。

  1. @echo off

  2. REM http://bbs.wuyou.net/forum.php?mod=viewthread&tid=422795&page=1&extra=#pid4171194

  3. REM 小心最好不要有特殊字符
  4. set mk=HKLM\SOFTWARE\dfsfsf
  5. set kw="%%SystemDrive%%\Windows\System32\mshta.exe" vbscript:createobject("wscript.shell").run("""%%SystemDrive%%\Windows\run.bat"" h",0,true)(window.close)

  6. echo.

  7. REM setlocal enabledelayedexpansion
  8. set kw=%kw:"="%
  9. REM set kw=%kw:\=\"%

  10. REM 不借助临时文件搞不定了,你这个字符串里同时有 % " ()  这些批处理忌讳字,尤其是小括号
  11. reg query “%mk%"|findstr /c:"%kw%" >%TEMP%\find_key.tmp

  12. for /f %%i in (%TEMP%\find_key.tmp) do (
  13.   echo [WARN] 删除 %MK%\%%i
  14.   reg delete "%MK%" /v "%%i" /f
  15. )
  16. pause&&goto :EOF
复制代码

R.zip

1.09 KB, 下载次数: 8, 下载积分: 无忧币 -2


作者: 红毛樱木    时间: 2020-11-7 14:42
junyee 发表于 2020-11-7 14:22
注意 %号 要用 %% 转义。

大佬66666
作者: plusv    时间: 2020-11-8 01:53
红毛樱木 发表于 2020-11-7 13:06
不是删dfsfsf,是删Persistence

红毛樱木>不是删dfsfsf,是删Persistence

你看 2F 图,是删 Persistence

-----------------------------------------

红毛樱木>不是直接删Persistence,是找到值为"C:\Windows\system32\igfxpers.exe"的项,删掉该Persistence项。
红毛樱木>如果是sdfsfdsaf项,就删sdfsfdsaf项的意思。项不固定所以才想去找一下

没什么差别,
批处理改一下就可以了.



Test2.rar

263 Bytes, 下载次数: 11, 下载积分: 无忧币 -2


作者: tools241    时间: 2020-11-8 08:30
本帖最后由 tools241 于 2020-11-8 08:48 编辑

reg QUERY HKLM\SOFTWARE\dfsfsf /v Persistence  >X:\tmp.txt
for /f "tokens=*" %%i in (X:\tmp.txt) do set jj=%%i
for /f "tokens=1,2,3 delims= " %%i in ("%jj%") do set Y=%%k
del /Q X:\tmp.txt 2>nul >nul
if "%Y%"=="C:\Windows\system32\igfxpers.exe" reg delete HKLM\SOFTWARE\dfsfsf /v Persistence /f
REM 由于%Y%可能为空值, 因此上一行的 "双引号" 不可省, 以免因语法错误而中断.


注: 本人制作了Firefox/Chrome/Opera/IETester_IE11/PotPlayer/PartAssist/...
     多种工具的免安装版 , 而制作PE也可能会用到, 此类批处理有写过.

作者: 610644034    时间: 2021-1-21 03:01
本帖最后由 610644034 于 2021-1-21 03:09 编辑

其实实现起来还是很简单的  用 bat脚本 实现

@echo off
setlocal enabledelayedexpansion
rem 脚本参数1:注册表路径 脚本参数2:需要查找删除的数据
rem *****这里因为简便处理获取 注册表数值名称 如果注册表数值名称包含空格 将会删除错误的数值名称******
call :查找删除指定注册表下的子项的值 "%~1" "%~2"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:查找删除指定注册表下的子项的值
rem :查找删除指定注册表下的子项的值 "in"       "in"
rem :参数列表                       注册表路径 需要查找删除的数据
set "查找删除指定注册表下的子项的值_注册表路径=%~1"
set "查找删除指定注册表下的子项的值_查找数据=%~2"
call :扫描注册表数值项并回调 "%~1" ":查找删除指定注册表下的子项的值_001" "查找删除指定注册表下的子项的值_临时数据"
goto :eof

:查找删除指定注册表下的子项的值_001
rem 这里只简单的获取注册表数值名称
echo x!%~1! | findstr /i "!查找删除指定注册表下的子项的值_查找数据!" >nul 2>nul && (
    for %%a in ( !%~1! ) do if "" NEQ "%%a" (
        set "查找删除指定注册表下的子项的值_需要删除的数值名称=%%a"
        echo 正在删除注册表路径:!查找删除指定注册表下的子项的值_注册表路径!
        echo 数值名称:%%a
        Reg Delete "!查找删除指定注册表下的子项的值_注册表路径!" /v "%%a" /f
        echo.
        goto :eof
    )
)
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:扫描注册表数值项并回调
rem :扫描注册表数值项并回调 "in"       "in"        "in_ptr"  
rem :参数列表               注册表路径 [回调标签]  [数据名称]  
( Reg Query "%~1" )>nul 2>nul || (
    goto :eof
)

if "" EQU "%~2" for /f "delims=*" %%a in ( 'Reg Query "%~1" ' ) do if "" NEQ "%%a" call :扫描注册表数值项并回调_001 "%~1" "%%~a"

if "" NEQ "%~2" if "" NEQ "%~3" for /f "delims=*" %%a in ( 'Reg Query "%~1" ' ) do if "" NEQ "%%a" (
    set "%~3=%%a"
    call :扫描注册表数值项并回调_002 "%~1" "%~2" "%~3"
)

if "" NEQ "%~2" if "" EQU "%~3" for /f "delims=*" %%a in ( 'Reg Query "%~1" ' ) do if "" NEQ "%%a" call :扫描注册表数值项并回调_003 "%~1" "%~2" "%%~a"
goto :eof

:扫描注册表数值项并回调_001
echo x%~2 | findstr /i /V "%~1" >nul 2>nul && echo %~2
goto :eof
:扫描注册表数值项并回调_002
echo x!%~3! | findstr /i /V "%~1" >nul 2>nul && call %~2 "%~3"
goto :eof
:扫描注册表数值项并回调_003
echo x%~3 | findstr /i /V "%~1" >nul 2>nul && call %~2 "%~3"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

作者: gdd123123    时间: 2021-5-18 21:02
求大神指导如何做关闭USB和网卡电源节能模式的批处理或者脚本




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