
电脑C盘又红了这种感觉我太熟了。以前我的第一反应是装个CCleaner但这两年CCleaner的体验越来越让人头大——启动弹窗、广告推荐、许可证提醒一个接一个清完一轮C盘也没多出多少空间。后来我干脆自己折腾了一套开源C盘清理Skill把它接到支持Skill的AI助手里平时只需要一句话“清理一下C盘”脚本会自动扫描缓存、临时文件、系统更新残留把能安全回收的空间全部释放出来。实测一轮常见操作能清出5到30GB关键整个清理过程逻辑透明每一类文件都明确写清楚了再也不怕误删。这篇文章适合两类人一类是C盘常年飘红、不想用付费全家桶的普通用户另一类是喜欢自己掌控工具、想用开源方案替代商业清理软件的开发者。我会把整套清理逻辑、代码结构、部署步骤和我踩过的坑全部展开你照着做就能复现。1. 为什么我放弃CCleaner转头自己写“开源C盘清理Skill”1.1 CCleaner没那么香了广告、捆绑和清理效果直线下降CCleaner在最火的那几年确实称得上“装机必备”。那时候它的界面很简洁勾选几个分类点一下清理临时文件和浏览器缓存瞬间少一截C盘空间立竿见影地多出来。但这些年它的变化相信用过的人都懂免费版功能越砍越少启动先弹窗时不时冒出来推荐其他软件的横幅许可证密钥的提醒更是无孔不入。我并不是说它清理能力不行了而是对于一个只想把磁盘空间腾出来的人来说这种交互已经变成一种负担。我印象最深的一次是帮朋友处理一台老笔记本C盘剩余空间只有3GB系统卡到几乎动不了。装好CCleaner清了一遍重启之后再看可用空间变成了5GB说实话有点失望。后来我卸载了它用Windows自带的磁盘清理加上存储感知反而清出了8GB多。这让我开始认真怀疑我们是不是把一件本来可以很透明的事情交给了自己完全看不透的黑盒。我不是要全盘否定商业清理工具毕竟它照顾了很多不熟悉电脑的用户。但对我这种喜欢了解背后逻辑的人来说清理C盘这件事完全可以做得更明白、更可控。于是我就动了手与其等商业工具赏我一点空间不如我直接把清理规则写清楚做成一个开源项目自己维护。1.2 开源C盘清理Skill到底是个什么东西先解释一下这个“Skill”是什么。它不是一个安装在Windows里的独立App而是AI助手体系里的一种“自定义技能”定义。现在很多Agent类和代码助手类产品都支持类似机制你把一组脚本、说明文件和参数规则放在一起告诉大模型“当用户提出某种需求时你可以调用这套技能去完成”。用户层面感受到的就是一句话触发底层的扫描、判断、清理和报告都由技能自动完成。拿我的这个开源C盘清理Skill来说文件包里包含一个SKILL.md说明文件大模型读到它就知道这个技能是干什么的还有一个Python脚本负责真正执行磁盘扫描和文件清理另外配一个rules.json里面写着哪些目录能删、哪些目录必须跳过、删除文件的最低时间阈值是多少。平时你完全可以不去管脚本内部怎么运行等C盘红了就丢给AI一句话它会自己把活儿干了。为什么强调“开源”因为涉及系统文件清理最大的风险就是“你不知道工具删了什么”。开源意味着所有清理规则明明白白放在那里你可以逐行审查也可以按自己的习惯调整。比如我不希望它动某个特定软件的缓存直接在rules.json里加一条排除项就行。这种可审计、可修改的特性是闭源工具很难给你的。1.3 一个折腾了很久才定下来的设计目标开始动手之前我给这个开源C盘清理Skill定了几个设计目标现在回头看这些目标直接决定了代码长什么样。第一是安全优先。C盘里不全是垃圾系统组件、驱动备份、用户文档都混在同一个分区里。所以我的清理规则默认只处理用户临时目录、系统临时目录、浏览器缓存和Windows更新下载缓存WinSxS、System32、Program Files这些目录在普通模式下碰都不碰。第二是价值可感知。很多人清理完C盘后感觉“白清了”因为不知道清理前后到底差了多少。我在脚本里加了统计模块每次运行都会给出报告扫描了哪些目录识别到多少可回收空间实际删除了多少文件。这样AI助手返回给你的就不只是一句冷冰冰的“清理完成”。第三是一句话触发。作为一个Skill它必须能被自然语言调用。你说“C盘满了帮我看看怎么弄”它能先跑一轮分析你说“开始清理吧”它才真正执行删除。这种交互比手动记命令、开工具点按钮要自然得多。第四是可回滚、可恢复。删除不是直接把文件粉碎掉而是尽可能先进回收站或做一个日志记录。第五是零驻留。它不常驻后台不用的时候完全不占内存、不弹广告。这几点都做到之后我才觉得它有资格去替代我电脑里的商业清理软件。2. 开源C盘清理Skill的核心清理逻辑逐段拆给你看2.1 先从“一键盘子”说起哪些文件值得删、哪些绝对不能碰很多新手清理C盘容易走向两个极端要么只敢用清理大师点一下“一键优化”要么胆子特别大看着哪个文件夹不顺眼就手动删除。我写这套清理逻辑时最重要的工作其实是列了一张“能删和不能删”的清单把Windows里常见的大体积目录挨个过了一遍。能安全清理的目录大致整理如下这里我按常见体积和风险级别做了个表格目录/项目说明典型体积风险级别%TEMP%用户临时目录软件运行时产生的临时文件、安装解压残留几百MB到几GB低C:\Windows\Temp系统临时文件几百MB低C:\Windows\SoftwareDistribution\DownloadWindows更新下载缓存删了系统会重新下载1GB到5GB低到中Chrome/Edge浏览器缓存网页图片、脚本缓存清掉后首次打开网页稍慢1GB到10GB低缩略图缓存文件管理器预览图几十到几百MB低回收站已删除但未彻底清除的文件视情况而定低C:\Windows.old旧版系统文件升级后保留30天左右用于回滚10GB到30GB中C:\ProgramData\Package Cache程序安装器缓存几百MB到几GB中建议保留最近版本绝对不能碰的目录包括C:\Windows\WinSxS系统组件存储删了系统就废了、C:\Windows\System32和SysWOW64、C:\Program Files和C:\Program Files (x86)、用户文档目录。看到WinSxS体积很大时别慌它里面有很多硬链接真实占用没有资源管理器显示的那么大真想瘦身得用系统自带的DISM工具而不是手工删除。我还在规则里加了很多防御性判断。比如遇到正在被占用的文件脚本会跳过而不是强行删除遇到权限不足的目录会记录下来告诉你“哪些需要管理员权限”。这套清理逻辑的核心原则很简单宁可漏删不可误删。2.2 清理前的空间分析和安全边界真正动手写代码之前我先解决了一个很实际的问题怎么知道C盘还有多少空间能释放最笨的办法是扫描全盘但全盘扫描太慢而且会把大量系统文件计入统计结果没有参考意义。所以我只针对上面那张“可清理清单”里的目录做定向扫描。扫描逻辑分三层。第一层是快速模式只统计用户临时目录、系统临时目录、浏览器缓存和回收站基本几秒钟就能跑完适合日常快速判断。第二层是标准模式加上Windows更新缓存、缩略图缓存和Package Cache耗时稍微长一点但能给出更完整的空间报告。第三层是深度模式会把休眠文件、系统还原点、旧系统文件全部纳入评估这一层才能真正碰到10GB以上的大块头。安全边界也很明确每一次删除前脚本都会检查目标路径是否命中排除列表。排除列表不仅在rules.json里写死还在代码里做了第二层硬编码防护。就算你手动修改规则把WinSxS加了进去代码里的白名单机制也会毫不留情地拦住它。我把这个机制称为“双重保险”测试期间它至少救了我三次。时间阈值也是一个关键参数。新产生的临时文件可能是某个软件正在使用的贸然删除容易出问题。我默认只清理创建时间超过48小时的文件缓存文件则要求超过7天。如果你觉得不够狠可以在调用Skill时加一句“连一周内的临时文件也清掉”但我不建议普通用户这么激进。2.3 核心代码实现统计、扫描、删除、回滚要理解整套Skill是怎么工作的看核心脚本的几个关键函数就够了。我用的语言是Python主要考虑是逻辑清晰、跨平台容易改成别的方式。以下是我简化的核心结构import os import shutil import time import json from pathlib import Path from datetime import datetime, timedelta # 安全目标目录对应 rules.json SAFE_TARGETS [ Path(os.environ.get(TEMP, rC:\Users\Public\Temp)), Path(rC:\Windows\Temp), Path(rC:\Windows\SoftwareDistribution\Download), ] # 硬编码的黑名单无论如何都不能碰 HARD_BLOCK [ Path(rC:\Windows\WinSxS), Path(rC:\Windows\System32), Path(rC:\Windows\SysWOW64), ] MIN_AGE_HOURS 48 # 临时文件最小存在时间 MIN_AGE_DAYS_CACHE 7 # 缓存文件最小存在时间 def is_path_blocked(path): for block in HARD_BLOCK: if path block or block in path.parents: return True return False def get_dir_size(path, max_depth3): total 0 try: with os.scandir(path) as it: for entry in it: try: if entry.is_file(follow_symlinksFalse): total entry.stat().st_size elif entry.is_dir(follow_symlinksFalse): if max_depth 0: total get_dir_size(entry.path, max_depth - 1) except (PermissionError, OSError): continue except (PermissionError, OSError): pass return total def cleanup_target(target, min_age_seconds, dry_runTrue): if is_path_blocked(target) or not target.exists(): return 0, 0 file_count 0 freed_size 0 now time.time() for root, dirs, files in os.walk(target): root_path Path(root) if is_path_blocked(root_path): dirs[:] [] continue for name in files: try: file_path root_path / name age now - file_path.stat().st_mtime if age min_age_seconds: if dry_run: freed_size file_path.stat().st_size file_count 1 else: # 实际删除前记录日志便于回溯 log_deletion(file_path) file_path.unlink() freed_size file_path.stat().st_size file_count 1 except (PermissionError, OSError): continue # 空目录也顺手清掉 if not dry_run and not any(root_path.iterdir()): try: root_path.rmdir() except OSError: pass return file_count, freed_size代码里最关键的是is_path_blocked()这个函数。它在扫描每一层目录时都会检查只要当前路径命中了硬编码黑名单就直接剪掉这个分支删除逻辑根本走不到那里。这比单纯依赖配置文件要安全因为就算rules.json被别人改错了代码本身也会拦住。删除之前我要求所有文件先进日志。log_deletion()会记录文件的完整路径、大小和删除时间。如果开了--backup参数我还会先把文件移动到backup目录而不是直接销毁。这样万一发现哪个文件删错了还能找回来。代价是备份目录会占空间所以我默认不开启只保留日志。2.4 让Skill听懂人话一句话触发背后的自然语言设计一个清理脚本本身并不稀奇市面上开源脚本一抓一大把。真正让它变成“Skill”的是那个描述文件SKILL.md。大模型读到它才知道什么时候该调用这个技能、要传什么参数。下面是一份极简示例--- name: c_drive_cleaner description: - 当用户要求清理C盘、释放磁盘空间、处理垃圾文件、解决C盘满了的问题时使用。 如果用户要求“看看能清理多少”先以 dry_run 模式运行。 parameters: action: enum: [analyze, clean] default: analyze mode: enum: [quick, standard, deep] default: standard backup: type: boolean default: false ---这只是一个参考结构不同平台的Skill格式多少有点差异比如Claude Code、Codex或者其他Agent类工具对frontmatter字段的定义不完全一样。但思路是通用的让模型知道“技能是干什么的”“什么时候触发”“需要哪些参数”。用户说“C盘满了帮我清理一下”模型会匹配到description里的关键词然后生成一次调用参数大概是actionclean, modestandard。如果用户说“先别删看看能清理多少”模型就该用actionanalyze, modequick。这套映射逻辑看着不起眼却是整个技能体验的核心。没有Skill的时候你得自己打开命令行记一堆参数还得理解输出结果有了Skill之后大模型把你的口语变成脚本调用再把结果翻译回人话这才是“一句话清理C盘”背后的完整链路。在Agent生态里这类能力现在常被称为“Skill”或“插件”。本质上就是给Agent挂上一个个可复用的工具箱它不需要重新发明轮子只需要在合适的场景里调用合适的工具。我这套C盘清理Skill就是很典型的Agent Skill应用场景。3. 实操落地把自己动手的Skill装进电脑3.1 环境准备与Skill文件结构先说一下环境要求。我这里以Windows 10/11为例需要系统里有Python 3.9以上版本。如果你不想装Python也可以把核心逻辑改写成PowerShell但维护起来会麻烦不少我个人建议直接上Python。整个项目的文件结构长这样c_drive_cleaner/ ├── SKILL.md ├── clean_c.py ├── rules.json ├── logs/ └── backup/SKILL.md是技能描述文件负责让AI助手知道怎么调用clean_c.py是核心清理脚本rules.json是可配置的清理规则比如哪些目录额外增加、哪些目录排除、时间阈值是多少。logs目录存放每次清理的日志backup目录用来放回收站式的备份文件。把整个目录放到你常用的代码项目路径下比如C:\tools\c_drive_cleaner然后让AI助手把目录作为外部技能加载进来。如果你用的是某个支持自定义Skill的平台通常只需要在配置界面里指定技能目录路径或者把SKILL.md的路径加入索引。不同平台的接入方式略有差异但核心都是同一件事让大模型能看到这个技能定义文件。3.2 首次运行检查与试删我强烈建议第一次运行时不要直接删除先跑一轮分析。命令行进入项目目录执行python clean_c.py --dry-run --mode standard这条命令会扫描所有允许清理的目录但什么都不删只输出一份报告。报告里会列出每个目录的识别大小、文件数量、建议清理等级。我第一次在一台用了两年的笔记本上跑报告显示C盘可回收空间大约有14GB其中浏览器缓存占了大头Windows更新缓存也有将近4GB。看完报告之后再决定要不要删心里就有底了。确认报告没问题之后再执行python clean_c.py --clean --mode standard默认标准模式已经能满足大部分日常清理需求。如果你对系统比较熟悉想释放更多空间可以上深度模式python clean_c.py --clean --mode deep深度模式除了清理常规垃圾文件还会评估休眠文件和系统还原点。但这个模式会涉及系统级设置调整建议只在C盘实在不够用的时候使用并且提前确认不需要休眠功能。3.3 常用的一句话指令和参数组合当Skill接入AI助手后你平常根本不需要打开命令行直接用大白话沟通就行。下面是我实际用下来效果最好的几句话“C盘满了帮我清理一下。” 对应标准清理模式直接删。“先帮我分析一下C盘能清理多少别着急删。” 对应dry-run模式适合谨慎型用户。“用快速模式看看我没时间等太久。” 对应quick模式只扫最核心的几个目录几秒钟出结果。“深度清理吧把休眠文件和系统还原点也看看。” 对应deep模式适合C盘已经红得发紫的情况。“清理完给我一份报告列一下都删了哪些东西。” 让AI助手把日志整理成易读列表。你会发现这些指令和脚本参数之间是松散的映射关系而不是死板的命令行传参。大模型会根据你的表达习惯自动选择最合适的参数组合。就算你说得不完整它也可以追问你要不要备份、是不是赶时间交互体验比用命令行友好得多。3.4 搭配Windows自带工具做深度清理再好的清理脚本也不可能接管系统所有事情。Windows自带的磁盘清理和DISM组件清理工具依然是深度清理场景下绕不开的组合拳。我建议即使你用了开源C盘清理Skill也定期手动跑一遍下面这几个命令。cleanmgr /sagerun:100磁盘清理工具可以扫描系统文件、Windows更新清理、系统还原点等这些虽然也可以在Skill深度模式里做评估但cleanmgr对普通用户更直观。/sagerun:100参数的意思是按预设的100号配置静默运行适合批处理。Dism.exe /Online /Cleanup-Image /StartComponentCleanup这个命令用来压缩WinSxS组件存储是处理“系统文件占用玄学空间”的正规手段。别手动去删WinSxS里的文件那样系统会直接崩溃正确操作就是交给DISM。Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore这个命令是先分析组件存储能压缩多少。运行完之后DISM会告诉你建议不清理或者预计释放多少空间然后再决定要不要跑真正清理的命令。相比傻乎乎地全盘扫描这套“先分析后清理”的流程和我的Skill设计理念是一致的。3.5 定时任务让清理变成自动的事手动清理最怕拖延C盘又不会自己变干净。所以我专门配了一个定时任务每周日凌晨3点自动执行标准模式清理。注意这个时间选择是有讲究的凌晨3点大部分人电脑都开着但不怎么用临时文件也基本没有软件在占用清理成功率最高。用Windows任务计划程序创建任务界面操作有点繁琐我更喜欢直接用命令行注册。需要注意因为涉及到写系统目录和操作用户临时文件这个任务要以管理员权限运行。创建命令大致如下schtasks /Create /TN C盘自动清理 /TR python C:\tools\c_drive_cleaner\clean_c.py --clean --mode standard /SC WEEKLY /D SUN /ST 03:00 /RU SYSTEM创建完之后可以先手动跑一次确认命令路径和Python路径都正确。很多人栽在这一步任务计划程序里直接写python但系统环境变量里没配Python路径结果任务怎么都不执行。稳妥的做法是在命令里写完整路径比如C:\Python310\python.exe C:\tools\c_drive_cleaner\clean_c.py。定时清理配合AI助手的按需清理基本上可以让C盘长期保持在一个健康水位。我自从配好之后已经大半年没再手动打开过磁盘清理工具了。4. 我踩过的坑常见问题与排查实录4.1 清理完C盘还是满的怎么办这是我被问得最多的问题也是曾经困扰我很长时间的问题。明明脚本报告显示删了好几个GB结果回到“我的电脑”一看C盘可用空间纹丝不动。后来我把问题拆开看发现可能原因有四种。第一种是文件其实没删成功但脚本误报了。原因通常是被正运行的软件占用os.remove抛了PermissionError我在代码里默认跳过但统计时还是加到了“已释放”数字里。后来我改成删除前先检查文件是否被占用并且把跳过项单独记录。第二种是删除的文件个头挺大但数量少比如一个Chrome缓存文件能有几百MB删完确实释放了但系统又同时产生了新的页面文件、日志文件把空间占回去了。第三种是真正的空间大户不在脚本管的范围里。休眠文件hiberfil.sys经常占好几个GB虚拟内存pagefile.sys也可能占8GB以上还有系统还原点、WinSxS组件存储这些都不是普通垃圾文件。这时候要用我前面说的DISM命令或者运行powercfg /h off关闭休眠来释放空间。第四种是某个软件的缓存目录特别大但没被规则覆盖。比如用户聊天软件、浏览器开发者工具、虚拟机镜像目录。遇到这种情况我的做法是先查看报告里哪些目录的体积异常再决定要不要把它们加入rules.json。4.2 误删和“删不掉”的问题先说说误删。我早期测试时为了图省事直接用了shutil.rmtree删除整个临时目录结果有一次把Chrome正在用的Local Storage目录给删了导致所有网站的登录状态全部失效。虽然不涉及重要数据但那种“清理工具反咬一口”的感觉特别糟糕。后来我改成逐文件删除并且把删除前日志级别提到最高还加了回收站选项。我现在的建议是任何情况下第一次清理都开备份模式。再说说“删不掉”的问题。PermissionError是最常见的尤其是C:\Windows\Temp里的一些系统残留。我的经验是不要试图强行获取权限去删开机后稍微等几分钟再跑一次很多文件就正常释放了。如果真的有一个文件卡了好几天那多半是某个服务在轮询访问值得花时间看看是哪个进程在占用而不是硬删。还有一个容易忽略的坑微信、QQ这类聊天软件的缓存目录非常庞大清理规则如果覆盖到它们腾出来的空间会很可观但代价是聊天记录里的历史图片、视频会从本地消失。虽然云端还有记录但重新加载会很慢。所以我默认没有把聊天软件缓存放进自动清理范围只会在深度模式下提醒用户。4.3 与CCleaner等工具共存要注意什么我知道很多人看完文章之后第一反应是“那我现在的CCleaner要不要卸掉”。我的答案是要么彻底换要么至少别让它们同时跑。我是比较决绝的验证了一段时间后直接把CCleaner卸载了。原因很简单两套工具同时清理相同路径很容易出现一个删除、另一个又试图写入的冲突极端情况下会造成某些软件配置损坏。如果你暂时还不想放弃手里的商业清理工具那我劝你至少做两件事第一关掉它的开机自启动和计划任务别让它天天在后台自动清理第二用CCleaner的时候就别跑我的Skill跑我的Skill就把它彻底退出。这类工具本质上是同一个领域的竞争者一起用并不会“效果加倍”反而容易互相干扰。从长期来看我还是觉得开源方案更靠谱。因为你能看到它每一步在干什么规则不合适就自己改出了问题也能从日志里找到原因。CLS工具是黑盒它删了什么你都无从查起。4.4 问题速查表为了让你以后少翻文章我把实际操作中最常遇到的问题整理成了一张速查表问题现象可能原因解决办法清理报告显示释放了很多C盘没变化文件被占用或删除失败误报查看日志里的“跳过项”重启后再跑一次确认没有杀毒软件拦截某些目录始终无法删除软件正在使用或权限不足用资源监视器查看句柄关闭相关进程后再试不要强用takeownC盘可用空间长期低于5GB休眠文件、虚拟内存、系统还原点占用过大运行DISM组件清理、考虑压缩休眠文件或关闭休眠清理后浏览器首次打开很慢缓存被清空需要重新加载属于正常现象浏览一段时间后速度自动恢复定时任务不执行Python路径没写完整在任务计划程序里改用Python完整路径并测试运行想清理聊天软件缓存但怕丢数据涉及本地聊天图片历史单独导出一份需要的文件再决定是否清理慎用深度模式这张表写出来之后我自己排查问题的速度提升了不少。很多看起来吓人的故障其实背后都是很普通的逻辑问题。最后再分享一个我自己的小习惯每次改完清理规则我都会先跑两轮dry-run一轮在干净的测试环境里跑一轮在带真实数据的电脑上跑把两份报告放在一起对比确认新增规则没有误伤可能才上正式环境。这套开源C盘清理Skill我维护了大半年折腾它的最大收获不是那几十GB的C盘空间而是我终于知道C盘里的东西到底是什么了。那种对系统运行逻辑的掌控感是任何商业工具都替代不了的。你也完全可以按自己的需求改代码、加规则把它变成真正顺手的东西。