批量备份从 reg 查询返回的键到文件

Backup returned keys from reg query to file in batch

我希望能够导出 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提示覆盖文件,我想改为追加。 我怎样才能达到同样的效果? 另外,请建议是否有更好的方法来自动卸载 duplicate(?) 由 'regasm' 安装的安装。 我可能更喜欢基于批处理文件的解决方案而不是 Powershell 或其他东西。谢谢!

reg.exe 不支持 appending/combining 的几个导出密钥。最简单的解决方法似乎是将每个键的数据输出到一个单独的文件中,然后将它们合并到一个文件中。请注意,您需要确保输出密钥文件未被 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"
)

这是我写的: 基本上和@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 操作也是如此。目前还可以管理,但肯定会有更好的解决方案。