Windows - 系统 - 垃圾清理 - 脚本
Windows - 系统 - 垃圾清理 - 脚本

清理系统垃圾

@echo off

echo 正在清除系统垃圾文件,请稍等......

del /f /s /q  %systemdrive%\Windows\Temp\*.*
del /f /s /q  %systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp\*.*
del /f /s /q  %systemdrive%\Windows\ServiceProfiles\LocalService\AppData\Local\Temp\*.*
del /f /s /q  %systemdrive%\*._mp
del /f /s /q  %systemdrive%\*.log
del /f /s /q  %systemdrive%\*.gid
del /f /s /q  %systemdrive%\*.chk
del /f /s /q  %systemdrive%\*.old
del /f /s /q  %systemdrive%\recycled\*.*
del /f /s /q  %windir%\*.bak
del /f /s /q  %windir%\prefetch\*.*

rd /s /q %windir%\temp & md  %windir%\temp

del /f /q  %userprofile%\cookies\*.*
del /f /q  %userprofile%\recent\*.*
del /f /s /q  %userprofile%\AppData\Local\Temp\*.*
del /f /s /q  %userprofile%\AppData\Local\CrashDumps\*.*
del /f /s /q  %userprofile%\Local Settings\Temporary Internet Files\*.*
del /f /s /q  %userprofile%\Local Settings\Temp\*.*
del /f /s /q  %userprofile%\recent\*.*
del /f /s /q  %windir%\system32\dllcache\*.*

echo 正在清除浏览器缓存,请稍等......
del /f /s /q  "%userprofile%\AppData\Local\Google\Chrome\User Data\Default\Cache\*.*"
del /f /s /q  "%userprofile%\AppData\Local\Microsoft\Edge\User Data\Default\Cache\*.*"

echo 正在清除驱动在安装时留下的解压文件,请稍等......

del /f /s /q  %SystemDrive%\AMD\*.*
del /f /s /q  %windir%\Intel\*.*
del /f /s /q  %windir%\NVIDIA\*.*
del /f /s /q  %windir%\Prog\*.*

echo 清理 Windows 更新缓存
net stop wuauserv
del /f /s /q %windir%\SoftwareDistribution\Download\*.*
net start wuauserv

echo 清除系统垃圾完成!

echo. & pause

给 C 盘减负:.cursor 目录联接

将 Cursor 配置/缓存目录放到 D 盘,在 C 盘用户目录下用目录联接指过去,可减轻 C 盘占用。

  1. 关闭 Cursor,避免占用 %USERPROFILE%\.cursor
  2. 在 D 盘建好目标目录(示例:D:\你的用户名\.cursor),把原 %USERPROFILE%\.cursor 里的内容剪切到该目录。
  3. 删除 C 盘侧已空的 %USERPROFILE%\.cursor 文件夹(必须是真实目录,不能残留同名文件夹,否则 mklink 会失败)。
  4. 管理员身份打开「命令提示符」或 PowerShell,执行下面的联接命令(将 {user} 换成你的 Windows 登录名;也可用下方带 %USERNAME% 的写法)。
REM 需要管理员
mklink /D "%USERPROFILE%\.cursor" D:\{user}\.cursor

若希望路径随当前用户名自动展开,可用:

REM 需要管理员(目标目录须已存在且已迁入数据)
mklink /D "%USERPROFILE%\.cursor" "D:\%USERNAME%\.cursor"

清理 Windows\Installer(孤儿补丁缓存)

C:\Windows\Installer 存放已安装程序的 .msi / .msp 补丁缓存,通常体积巨大(10–20 GB+)。其中一部分是"孤儿文件"——对应的程序已卸载,但缓存未被清除。

此目录不可直接删除,否则会导致程序无法卸载或修复。

原先常用的第三方工具 PatchCleaner(homedev.com.au)已停止维护、官网下线。目前建议通过系统自带磁盘清理来处理:

REM 管理员运行 - 先配置清理项(勾选全部,尤其"Windows 更新清理")
cleanmgr /d C /sageset:1

REM 再执行清理
cleanmgr /d C /sagerun:1

清理 Windows\WinSxS(组件存储)

WinSxS(Windows Side-by-Side)是 Windows 的组件存储,位于 C:\Windows\WinSxS

为什么体积大?

  • Windows 按组件 + 版本号管理系统文件。每次系统更新,新旧版本都保留在 WinSxS 中以便回滚。
  • C:\Windows\System32 等目录下的 DLL 实际上是硬链接指向 WinSxS 中的文件。资源管理器和 SpaceSniffer 会重复计算硬链接体积,所以报告值比实际独占空间大(通常只有报告值的 40%–60%)。

查看真实占用:

REM 管理员运行
Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore

输出示例:

组件存储(WinSxS)的大小:          12.35 GB
与 Windows 共享:                    8.10 GB    ← 硬链接重复部分,不算真正占用
备份和已禁用的功能:                 1.52 GB
缓存和临时数据:                     0.73 GB
可以推荐清理的组件数:              是

DISM 清理命令:

DISM(Deployment Image Servicing and Management)是 Windows 内置的镜像服务工具,/Cleanup-Image 子命令用于清理组件存储中被新版取代的旧版本组件文件

REM 温和清理(保留回滚能力,可回收 1-2 GB)
Dism.exe /Online /Cleanup-Image /StartComponentCleanup

REM 深度清理(以当前更新为基线,永久删除旧版本,不可回滚旧更新,可回收 2-5 GB)
Dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase
参数 行为 回滚能力
/StartComponentCleanup 删除被取代的旧版本组件 保留
/StartComponentCleanup /ResetBase 以当前更新为新基线,永久删除所有旧版本 丧失(一般无影响)

清理用户目录缓存

目录 清理方式
%USERPROFILE%\AppData\Local\Temp 直接清空(已在上方脚本覆盖)
%USERPROFILE%\AppData\Local\CrashDumps 直接清空(已在上方脚本覆盖)
%USERPROFILE%\AppData\Local\Google\Chrome\...\Cache 清空浏览器缓存(已在上方脚本覆盖)
%USERPROFILE%\AppData\Local\Microsoft\Edge\...\Cache 同上
%USERPROFILE%\.cursor 建议 mklink 到 D 盘(见上方小节)
%USERPROFILE%\AppData\Local\NuGet\v3-cache dotnet nuget locals all --clear
%USERPROFILE%\AppData\Local\Microsoft\Visual Studio 在 VS 中清理组件缓存

清理 AppData 各应用缓存

AppData\Local 是 C 盘用户目录中的"隐形大户",以下按占用从大到小列出清理建议:

目录 大小 清理方式
Microsoft\Outlook ~4.3 GB Outlook 离线缓存(OST),在 Outlook → 帐户设置 → 数据文件中,调整邮件保留时间为 3–6 个月
Google\Chrome ~3.1 GB chrome://settings/clearBrowserData 清理缓存
JetBrains ~3.7 GB IDE → File → Invalidate Caches;删除不再使用的旧版本目录
Microsoft\Edge ~1.4 GB edge://settings/clearBrowserData 清理缓存
Packages ~1.7 GB UWP 应用数据(含新版 Teams 等),通过 设置 → 应用 → 对应应用 → 重置
NuGet ~1.5 GB dotnet nuget locals all --clear(详见下方说明)
AndroidStudio* ~1.3 GB 不做 Android 开发可卸载;否则 rd /s /q "%USERPROFILE%\.gradle\caches"
Postman ~1.2 GB Postman 设置中清理历史/响应缓存;不用可卸载
Microsoft\VisualStudio ~887 MB VS Installer → 更多 → 清理下载缓存
Microsoft\Office ~716 MB Office 缓存,一般不需手动清
YarnCache ~676 MB yarn cache clean
Cursor ~686 MB 建议 mklink 到 D 盘(见上方小节)
AzureFunctionsTools ~459 MB 不用可删:rd /s /q "%LOCALAPPDATA%\AzureFunctionsTools"
Microsoft\Terminal Server Client ~388 MB RDP 位图缓存,可安全删除
go-build ~294 MB go clean -cache
Microsoft\Teams\Cache ~229 MB del /f /s /q "%LOCALAPPDATA%\Microsoft\Teams\Cache\*.*"

快速清理脚本(可安全执行):

REM === AppData 缓存清理 ===

REM Yarn 缓存(~676 MB)
yarn cache clean

REM NuGet 全部本地缓存(~1.5 GB)
dotnet nuget locals all --clear

REM Go 编译缓存(~294 MB)
go clean -cache

REM RDP 位图缓存(~388 MB)
del /f /s /q "%LOCALAPPDATA%\Microsoft\Terminal Server Client\Cache\*.*"

REM Teams 旧版缓存(~229 MB)
del /f /s /q "%LOCALAPPDATA%\Microsoft\Teams\Cache\*.*"

REM Edge 缓存(~1.4 GB)
del /f /s /q "%LOCALAPPDATA%\Microsoft\Edge\User Data\Default\Cache\*.*"

REM Chrome 缓存(~3.1 GB)
del /f /s /q "%LOCALAPPDATA%\Google\Chrome\User Data\Default\Cache\*.*"

NuGet 缓存迁移说明

NuGet.config 中设置 globalPackagesFolder 只控制包文件本体的存放位置,NuGet 还有三个独立缓存仍然留在 C 盘:

缓存目录 用途 globalPackagesFolder 控制?
AppData\Local\NuGet\v3-cache HTTP 响应缓存(包元数据、搜索结果等 API 响应)
AppData\Local\NuGet\plugins-cache 认证插件缓存(凭据提供程序等)
Temp\NuGetScratch 临时工作目录(安装/还原过程中的中间文件)
globalPackagesFolder 指向的目录 包文件本体(.nupkg + 解压内容)

要将这三个缓存也迁到 D 盘,需要设置系统环境变量

REM 管理员运行 - 永久设置系统环境变量
setx NUGET_HTTP_CACHE_PATH "D:\AppData\nuget\v3-cache" /M
setx NUGET_PLUGINS_CACHE_PATH "D:\AppData\nuget\plugins-cache" /M
setx NUGET_SCRATCH "D:\AppData\nuget\scratch" /M

设置后,先清理旧缓存再重启:

dotnet nuget locals all --clear

常用磁盘分析工具


最后修改于 2024-02-03

此篇文章的评论功能已经停用。