备份将reg查询中的密钥批量返回到文件

时间:2016-12-27 08:18:21

标签: windows batch-file registry

我希望能够导出reg query返回的注册表项的键值。 我正在尝试编写一个脚本来查找特定dll的注册,然后将所有密钥写入backup file,然后尝试通过删除密钥来实现卸载。这是我到目前为止所能提出的:

@echo off

reg query HKLM\SOFTWARE\Classes /s /f %1 2>&1 >NUL
if errorlevel 1 goto DLL_MISSING

for /f "tokens=1,1" %%a in ('reg query HKLM\SOFTWARE\Classes /s /f %1 2^>NUL ^| findstr /I "^HKEY_"') do (
echo %%a
REG export %%a Backup.REG
)
goto :DLL_FOUND

:DLL_MISSING
echo Assembly not found.
goto :eof
:DLL_FOUND
echo Assembly found.

现在reg export提示覆盖文件,我想要追加。 我怎样才能实现同样的目标? 另外,如果有更好的方法可以自动卸载“regasm”安装的duplicate(?)安装程序,请进行建议。 我更喜欢基于批处理文件的解决方案,而不是Powershell或其他。谢谢!

2 个答案:

答案 0 :(得分:1)

reg.exe不支持附加/组合多个导出的密钥。最简单的解决方法似乎是将每个密钥的数据输出到一个单独的文件中,然后将它们合并到一个文件中。请注意,您需要确保FOR循环没有选择输出密钥文件,我只需将组合密钥文件放在名为target的子文件夹中即可确保。

@ECHO OFF   

MKDIR target
ECHO Windows Registry Editor Version 5.00 > target\combined.reg

FOR %%G IN (*.reg) DO (
    TYPE "%%G" | FINDSTR /V "Windows Registry Editor" >> target\combined.reg
    DEL "%%G"
)

答案 1 :(得分:0)

这是我写的: 它基本上与@ zb226提出的相似。

@echo off

reg query HKLM\SOFTWARE\Classes /s /f %1 2>&1 >NUL
if errorlevel 1 goto DLL_MISSING

ECHO Windows Registry Editor Version 5.00 > backup.reg

for /f "tokens=1,2" %%a in ('reg query HKLM\SOFTWARE\Classes /s /f "%1" 2^>NUL ^| findstr /I "^HKEY_"') do (
echo Deleting : %%a
reg export %%a bkp_tmp.reg /y >nul 2>&1
type bkp_tmp.reg | FINDSTR /V "Windows Registry Editor" >> backup.reg
reg delete %%a /f >nul 2>&1
)
del /f bkp_tmp.reg
goto :DLL_FOUND

:DLL_MISSING
echo Assembly not found.
goto :eof
:DLL_FOUND
echo Assembly found.

这很丑陋,因为肯定有重复的重复,但现在有效。 reg delete操作也是如此。它现在可以管理,但绝对可以有更好的解决方案。