批量备份从 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
操作也是如此。目前还可以管理,但肯定会有更好的解决方案。
我希望能够导出 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
操作也是如此。目前还可以管理,但肯定会有更好的解决方案。