Windows清理脚本 Python编写
Contents
起因
Windows 用久了:临时文件、日志、图标缓存、缩略图缓存一路堆积,C 盘越来越满;“此电脑”里还塞着一排用不到的系统文件夹。网上流传的清理 bat 一大把,但黑盒不敢跑——用 Python 自己写一个,每一行删的是什么自己说了算。
需求
- 一键清理:系统临时文件、prefetch、minidump、图标/缩略图缓存、最近访问痕迹
- 顺手把“此电脑”里的多余文件夹(桌面/文档/下载等那排)从显示里去掉
技术实现原理
脚本清理的其实是四类东西
临时文件(temp、prefetch、minidump——系统本来就会重建的数据)、缓存文件(图标缓存 IconCache.db、缩略图缓存 thumbcache_*.db——删了系统重建,能治图标显示错乱)、使用痕迹(Recent 最近访问、托盘图标记忆 TrayNotify)、注册表命名空间显示(见下)。
为什么删图标缓存前要杀 explorer
图标和缩略图缓存文件正被 explorer.exe 占用着——Windows 不允许删除被占用的文件。所以脚本的动作链是:taskkill 杀掉 explorer → attrib 去掉隐藏/系统/只读属性(这些属性会挡住 del)→ del 删除 → start explorer 重启外壳。任务栏消失几秒再回来,就是这个过程的正常表现。
remove_files 的两个细节
glob.glob()默认不递归:os.path.join(systemdrive, '*.tmp')只匹配系统盘根目录一层,不是全盘扫描——网上老清理脚本的传统写法,真正占空间的大头在后面 temp/prefetch 那些目录里;- 每个删除都包在 try/except 里:正在被占用的文件删不掉会抛异常,捕获后打印继续,一个文件失败不至于中断整个清理。
注册表那段在删什么
Explorer\MyComputer\NameSpace 下的这些 GUID 是“此电脑”里那排系统文件夹(桌面、文档、下载、图片、音乐、视频、3D 对象)的注册表标识。删掉键的效果是它们不再显示在“此电脑”里,磁盘上的真实文件夹原封不动——这是改“显示”,不是删“数据”。
前提条件
安装Python3.10
直接下载连接:https://www.python.org/ftp/python/3.10.6/python-3.10.6-amd64.exe
如果无法下载,就去官方网站下载: https://www.python.org/downloads/windows/
新建clean.py文件
文件内容如下:
|
|
脚本说明
- 路径全部来自
os.getenv()环境变量(windir、systemroot、temp、userprofile……),换机器不用改脚本; - 两套手段配合:Python 自己的 glob/os.remove 清普通文件;图标缓存那段用
os.system()调 cmd 命令(taskkill/attrib/del),其中%userprofile%这种写法是 cmd 的变量展开(os.system 走的是 cmd.exe),和 Python 的字符串没有关系; - 注册表用 winreg 模块:remove_reg_user 清当前用户的 NameSpace(脚本实际调用的只有它);remove_reg_os 清系统级的(HKLM,需要管理员权限),代码里备着但没调用,要用自己加一行;
- 结尾的 TrayNotify 两条是在清托盘“记忆”的旧图标。
运行
开始-》运行-》输入cmd回车打开命令行,
输入以下命令:
|
|
回车开始执行。
踩坑记录与注意事项
- 权限决定清理范围:以管理员身份运行 cmd 再执行脚本,temp、minidump、HKLM 级注册表才动得了;普通权限下这些操作会大量 Permission denied(脚本不会崩,但清不干净);
- 报错刷屏是正常的:被占用的文件删不掉会打印异常继续跑,看到一串 [WinError 32] 不用管;
- 清 prefetch 有代价:prefetch 是 Windows 的预读取数据,删掉后一段时间内应用启动会变慢(系统边用边重建),不是纯赚不赔的操作,追求极致开机速度的反而该留着;
- ** Recent / 痕迹清理涉及个人习惯**:清掉最近访问记录后,各软件“最近文件”列表也会空,用得顺手的要先想清楚;
- 缩略图缓存删完首遍浏览会慢:资源管理器重新生成缩略图需要时间,属预期行为;
- 想全盘清理把 glob 改递归:
glob.glob(os.path.join(root, '**', ext), recursive=True),但全盘递归 *.log 会误伤应用数据,建议只在明确的安全目录里递归; - 先跑 dry-run 更稳:把 os.remove 换成 print 看一遍会删什么,确认无误再动真格。
Author 软件开发大郭
LastMod 2022-08-18