我希望能够导出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
或其他。谢谢!
答案 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
操作也是如此。它现在可以管理,但绝对可以有更好的解决方案。