用于查找和删除注册表项和/或值的批处理脚本

时间:2018-03-06 22:25:32

标签: batch-file registry

我已经在互联网上搜索批处理文件以查找和删除注册表项和/或值。我在这里找到最接近的东西:  Deleting all registry keys containing or named "string" with Batch

但是,我在"HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"中创建了一个名为"tasksche"的注册密钥,更新了脚本RegKey和搜索变量,然后将操作更改为删除。它永远不会发现并删除它。

我已经尝试过其他方法来解决这个问题,但是没有工作。

我想写的是: 批处理文件从文本文件中读取键列表 批处理文件扫描注册表以查找这些键和/或值 批处理文件删除这些键。

1 个答案:

答案 0 :(得分:1)

您可以将批处理文件与单个命令行一起用于此任务:

@for %%I in ("tasksche" "Other Value" "One More Value") do @%SystemRoot%\System32\reg.exe delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "%%~I" /f 2>nul

内部命令 FOR 为括号中指定的每个字符串运行外部命令 REG ,从指定的注册表项中删除注册表值。

如果要删除的值或注册表项本身不存在,

REG 将输出错误消息。但写入 STDERR 的此错误消息会重定向到设备 NUL 以禁止它。

可以扩展此单行批处理文件以读取要从文本文件中删除的注册表值,并另外输出找到并成功删除的注册表值。

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "CreatedListFile="
set "ListFile=%TEMP%\ListFile.txt"

if not exist "%ListFile%" (
    set "CreatedListFile=1"
    (
        echo tasksche
        echo Other Value
        echo "One More Value"
    ) >"%ListFile%"
)

for /F "usebackq delims=" %%I in ("%ListFile%") do (
    %SystemRoot%\System32\reg.exe delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "%%~I" /f 2>nul
    if not errorlevel 1 echo Deleted "%%~I" from HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
)

if defined CreatedListFile del "%ListFile%"
endlocal

当然可以在 FOR 执行的命令块中运行多个reg delete。但请注意,使用reg delete删除HKLM中的值或密钥需要管理权限,即批处理文件必须以管理员身份执行。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • del /?
  • echo /?
  • endlocal /?
  • if /?
  • for /?
  • reg /?
  • reg delete /?
  • set /?
  • setlocal /?

另请阅读Microsoft文章,其中有Using Command Redirection Operators解释用于创建列表文件的>和用于禁止显示错误消息的2>nul