WIN11.24H2和WIN2025中用DISM始终无法处理的两个回收项,DISM删除不可回收项

迅恒数据中心
适用到WIN11.24H2或WIN2025 26100版本号大于1742
--------------------------------------------------
使用dism /online /cleanup-image /AnalyzeComponentStore命令 可查看 可回收的两个包


组件存储的实际大小 : 8.17 GB
    已与 Windows 共享 : 7.22 GB
    备份和已禁用的功能 : 952.65 MB
    缓存和临时数据 :  0 bytes
上次清理的日期 : 2025-04-20 10:48:38
可回收的程序包数 : 2
推荐使用组件存储清理 : 是
--------------------------------------------------
此两个可回收程序包为
- [ Microsoft-Windows-FodMetadataServicing-Desktop-Metadata-Package~31bf3856ad364e35~amd64~~10.0.26100.1742]
- [ Package_for_RollupFix~31bf3856ad364e35~amd64~~26100.1742.1.10]
两个软件包“已被深度取代”
@ECHO Off
PUSHD %~DP0
NET SESSION >NUL 2>&1
IF %ERRORLEVEL% NEQ 0 (
    ECHO.
    ECHO SET UAC = CreateObject^("Shell.Application"^) > "%TEMP%\Getadmin.vbs"
    ECHO UAC.ShellExecute "%~f0", "%1", "", "runas", 1 >> "%TEMP%\Getadmin.vbs"
    "%TEMP%\Getadmin.vbs"
    DEL /f /q "%TEMP%\Getadmin.vbs" 2>NUL
    EXIT /B
)

:: 设置工作路径
set "MyPath=%CD%\Log"
if not exist "%MyPath%" mkdir "%MyPath%"

:: 初始化变量
set "PackageName=Package_for_RollupFix~31bf3856ad364e35~amd64~~26100.1742.1.10"
set "FoundIt=0"
set "Cont=0"
set "Zero=0"

:: 获取已安装包列表
echo 正在检查已安装的更新包...
dism /online /get-packages /format:table > "%MyPath%\WinPack.txt"

:: 检查指定包是否存在
findstr /i /c:"%PackageName%" "%MyPath%\WinPack.txt" >nul
if %errorlevel% equ 0 (
    set FoundIt=1
    echo 发现目标更新包: %PackageName%
) else (
    echo 未找到目标更新包: %PackageName%
    goto :exit
)

:: 用户确认
:confirm
set /p answ="找到更新包,是否继续?[Y/N]: "
if /i "%answ%"=="y" (
    set Cont=1
) else if /i "%answ%"=="n" (
    goto :exit
) else (
    goto :confirm
)

:: 执行清理操作
echo 正在清理并重置SxS存储
dism /online /cleanup-image /startcomponentcleanup > "%MyPath%\CleaningTheStore_BeforeDel.txt"
rem dism /online /cleanup-image /startcomponentcleanup /resetbase > "%MyPath%\CleaningTheStore_BeforeDel.txt"

echo 正在清理过时的服务包...
dism /online /Cleanup-Image /SPSuperseded > "%MyPath%\SPSuperseded_BeforeDel.txt

echo 正在分析组件存储大小...
dism /online /cleanup-image /analyzecomponentstore > "%MyPath%\AnalyzeTheStore_BeforeDel.txt"

:: 获取可回收包数量
for /f "tokens=6" %%a in ('findstr /c:"Number of Reclaimable Packages" "%MyPath%\AnalyzeTheStore_BeforeDel.txt"') do (
    set Nr=%%a
    echo 找到的可回收包数量: !Nr!
)

if !Nr! gtr 2 (
    echo 发现意外的包数量: !Nr!
    goto :exit
)

:: 删除确认
:delete_confirm
set /p answ="确定要删除此更新包吗?[Y/N]: "
if /i "%answ%"=="y" (
    echo 正在删除更新包...
    dism /online /remove-package /packagename:%PackageName% > "%MyPath%\DeletingPackage.txt
    
    echo 正在清理并重置SxS存储
    dism /online /cleanup-image /startcomponentcleanup > "%MyPath%\CleaningTheStore_AfterDel.txt
    rem dism /online /cleanup-image /startcomponentcleanup /resetbase > "%MyPath%\CleaningTheStore_AfterDel.txt

    echo 正在清理过时的服务包...
    dism /online /Cleanup-Image /SPSuperseded > "%MyPath%\SPSuperseded_AfterDel.txt
    
    echo 正在分析组件存储大小...
    dism /online /cleanup-image /analyzecomponentstore > "%MyPath%\AnalyzeTheStore_AfterDel.txt
    
    for /f "tokens=6" %%a in ('findstr /c:"Number of Reclaimable Packages" "%MyPath%\AnalyzeTheStore_AfterDel.txt"') do (
        set FinalNr=%%a
    )
    
    if !FinalNr! equ 0 (
        echo SxS 存储清理成功!
    ) else (
        echo 清理未完成,剩余包数量: !FinalNr!
    )
) else if /i "%answ%"=="n" (
    goto :exit
) else (
    goto :delete_confirm
)

:: 显示最终结果
echo ------------------------------
echo DISM 组件存储分析:
dism /online /cleanup-image /analyzecomponentstore

echo ------------------------------

:exit
echo 正在退出脚本...
pause

能清理1.3G左右

分类:教程帮助 百度收录 必应收录