|
今天问DS,帮忙写个批处理。根据sytem32下面的.dll和.ocx文件,查找注册表HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES\CLID,找到非匹配项则输出到当前目录下指定的文本文件。
输出结果不是注册表项,输出结果是某个dll文件没有与注册表关联,再申请修改,老是说系统繁忙,没时间就不搞了。
@echo off
setlocal enabledelayedexpansion
REM 设置输出文件
set "outputFile=NonMatchingCLSIDs.txt"
REM 清空输出文件
echo. > "%outputFile%"
REM 遍历 System32 目录下的 .dll 和 .ocx 文件
for %%f in (%SystemRoot%\System32\*.dll %SystemRoot%\System32\*.ocx) do (
REM 获取文件名(不含路径和扩展名)
set "fileName=%%~nf"
REM 在注册表中查找与文件名相关的 CLSID
for /f "tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Classes\CLSID" /s /f "%%~nf" 2^>nul ^| findstr /i "HKEY_LOCAL_MACHINE"') do (
set "clsid=%%a"
REM 检查 CLSID 是否与当前文件关联
reg query "HKLM\SOFTWARE\Classes\CLSID\!clsid!\InprocServer32" /ve 2>nul | findstr /i "%%f" >nul
if errorlevel 1 (
REM 如果 CLSID 未关联到当前文件,则输出到文件
echo !clsid! is not associated with %%~nxf >> "%outputFile%"
)
)
)
echo Non-matching CLSIDs have been written to %outputFile%. |
|