我希望能够导出reg query
返回的注册表键的键值。我试图编写一个脚本以找到特定dll
的注册,然后在尝试通过删除键来实现卸载之前,将所有键写入backup file
。这是我到目前为止可以提出的:
@echo off
reg query HKLMSOFTWAREClasses /s /f %1 2>&1 >NUL
if errorlevel 1 goto DLL_MISSING
for /f "tokens=1,1" %%a in ('reg query HKLMSOFTWAREClasses /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
不支持几个导出密钥的附加/组合。最简单的解决方法似乎是将每个密钥的数据输出到一个单独的文件中,然后将其合并到一个文件中。请注意,您需要确保FOR
循环未访问输出密钥文件,我只需将组合的密钥文件放在称为target
的子文件夹中来确保。
@ECHO OFF
MKDIR target
ECHO Windows Registry Editor Version 5.00 > targetcombined.reg
FOR %%G IN (*.reg) DO (
TYPE "%%G" | FINDSTR /V "Windows Registry Editor" >> targetcombined.reg
DEL "%%G"
)
这就是我写的:这基本上与 @zb226提出的内容相似。
@echo off
reg query HKLMSOFTWAREClasses /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 HKLMSOFTWAREClasses /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
操作也是如此。目前是可以管理的,但绝对可以有更好的解决方案。