我已经在互联网上搜索批处理文件以查找和删除注册表项和/或值。我在这里找到最接近的东西: Deleting all registry keys containing or named "string" with Batch。
但是,我在"HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
中创建了一个名为"tasksche"
的注册密钥,更新了脚本RegKey
和搜索变量,然后将操作更改为删除。它永远不会发现并删除它。
我已经尝试过其他方法来解决这个问题,但是没有工作。
我想写的是: 批处理文件从文本文件中读取键列表 批处理文件扫描注册表以查找这些键和/或值 批处理文件删除这些键。
答案 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
。