windows系统盘瘦身脚本子

不会Python 全程vibe coding

C盘瘦身 - 目录迁移工具(软链接 / Junction)--- 功能与使用说明

单文件 Python 脚本(tkinter 图形界面,零第三方依赖)。 用途:清点 C:\Users 各目录磁盘占用,并把占用大的目录「搬」到其它盘, 同时在原位置留下软链接(junction),让系统和软件仍按原路径正常访问,从而释放 C 盘空间


一、功能说明

1. 扫描 C 盘用户目录占用

  • 启动即自动扫描 C:\Users 下的每个一级目录(每个用户名目录)。
  • 后台线程逐个计算真实磁盘占用,界面不卡顿
  • 列表展示三列:目录名 / 大小 / 说明(文件数·文件夹数)
  • 底部状态栏显示「共 N 个文件夹 · 合计 X · 当前路径」。

2. 双击下钻,逐级查看

  • 双击任意目录,进入其下级目录,继续计算并显示该目录下各子文件夹占用。
  • 顶部路径框实时显示「当前所在位置」。
  • 已扫描过的目录会被缓存 ,再次进入(或点「上级」返回)时瞬时呈现,不再重扫。

3. 右键「一键迁移到 C 盘(软链接)」

  • 在目录项上右键 → 选择「一键迁移到 C 盘(软链接)」。
  • 迁移原理:软链接(junction) 。把源目录内容移动到你指定的目标文件夹, 再在原位置建立指向目标的软链接。原路径继续可用,C 盘空间被释放。
  • 已迁移的目录在列表中标记为 [链接] ,并显示其指向的目标路径。

4. 自由选择目标 + 迁移前确认 + 结果反馈

  • 目标文件夹可自由选择 (默认 D:,弹窗内自行指定任意盘/目录)。

  • 迁移前自动校验:

    • 目标不可位于源目录内部(避免自指);
    • 目标同名目录若已存在且非空 → 拒绝,防止误覆盖。
  • 弹窗确认显示「源 / 目标 / 大小」后才执行。

  • 执行时弹进度窗 ;完成后弹结果提示(成功显示软链接路径,失败显示原因)。

  • 完成后自动刷新列表,使 [链接] 状态立即可见。

5. 其它辅助

  • 「← 上级」 按钮:返回上一级目录(已扫描目录秒切,不重扫)。
  • 「刷新」 按钮:强制重新计算当前目录占用(忽略缓存)。
  • 分析结束后,列表按占用大小从大到小自动排序,方便一眼找到最占空间的大目录。

二、软链接(Junction)迁移原理

markdown 复制代码
迁移前:
  C:\Users\你\Downloads\   ← 真实文件,占满 C 盘(如 50 GB)

迁移后:
  D:\你的备份\Downloads\    ← 真实文件搬到这里
  C:\Users\你\Downloads\    ← 变成 junction 软链接,指向 D:\你的备份\Downloads\
        (它几乎不占 C 盘空间,系统和软件按原路径访问毫无感知)
  • 采用 mklink /J(目录 junction) :Windows 原生支持,无需管理员权限, 对任意程序/游戏/软件读原路径都透明。
  • mklink 失败,会回退到 os.symlink(目录符号链接)并再次校验。
  • 仅当软链接确已建立才报告成功,杜绝「文件被剪走、原位置却没链接」的残缺状态。

三、运行环境

项目 要求
操作系统 Windows(junction 为 Windows 特性)
Python 3.8+,且需带 tkinter(标准 Windows 安装版自带)
第三方库 无(仅用标准库)

⚠️ 注意:本机托管 Python 不含 tkinter ,请用系统 Python 运行: C:\Python313\python.exe

启动方式

makefile 复制代码
C:\Python313\python.exe D:\cachedata\workbuddy\2026-09-01-11-18-22\c_drive_migrator.py

双击 .py 文件若无法运行,请改用上面的命令行方式。


四、界面与操作步骤

界面布局

ini 复制代码
┌──────────────────────────────────────────────────────────┐
│ [← 上级] [刷新]  C:\Users\你的用户名        (路径框,只读) │
├──────────────────────────────────────────────────────────┤
│ 目录                  │ 大小        │ 说明                 │
│ ──────────────────────┼─────────────┼───────────────────── │
│ Downloads             │ 50.12 GB    │ 1234 文件 / 56 文件夹 │
│ Documents  [链接]     │ → D:\备份...  │ 已迁移(软链接)      │
│ Desktop               │ 8.30 GB     │ ...                    │
│ (双击行下钻 · 右键行迁移)                              │
├──────────────────────────────────────────────────────────┤
│ 共 N 个文件夹 · 合计 X · C:\Users\你的用户名   (状态栏)  │
└──────────────────────────────────────────────────────────┘

操作步骤

  1. 启动 :打开即列出 C:\Users 各用户目录及其占用。

  2. 下钻:双击某目录 → 查看其子文件夹占用。

  3. 返回:点「← 上级」回到上一级(已扫描过的秒回)。

  4. 重算:点「刷新」强制重新统计当前目录。

  5. 迁移(核心):

    1. 在要迁移的目录行上右键 → 选「一键迁移到 C 盘(软链接)」。

    2. 在弹出的文件夹选择框里选定目标父文件夹 (如 D:\备份)。

      • 脚本会把源目录以原名 建在其下,例如选 D:\备份 则目标为 D:\备份\Downloads
    3. 确认弹窗显示「源 / 目标 / 大小」,点「是」继续。

    4. 等待进度窗完成 → 看到「迁移完成」提示。

    5. 列表中原目录变为 Downloads [链接] 并显示指向 D:\备份\Downloads,C 盘空间已释放。


五、安全与健壮性机制

  • 不重复统计软链接 :计算与遍历均 followlinks=False,已迁移的 junction 不计入、不误入。
  • 属性清理 :对用户文件夹常见的「系统/只读」属性,迁移前先清除,确保能被删除、能被 mklink 覆盖(修复了早期「只剪切、不建链接」的问题)。
  • 残留保护robocopy /MOVE 后若源目录仍残留文件(被程序占用),主动放弃建链接并提示,避免数据割裂丢失。
  • 删除重试:源目录删除最多重试 6 次(应对文件临时占用),仍失败则保全数据。
  • 编码兼容subprocess 调用显式用 gbk 解码,避免中文系统下 cmd 输出崩溃。
  • 代次失效:导航(上级/下钻/刷新)会让旧的后台扫描自增作废,导航永不卡在扫描中。

六、注意事项与局限

  • 迁移正被程序占用 的目录(如 AppData 部分内容、NTUSER.*)可能失败,建议先关闭相关软件。
  • 建议优先迁移可释放空间的大目录:Downloads / 文档 / 桌面 / 视频 / 图片 / 音乐
  • junction 指向的目标盘不能脱机/断开,否则原路径将不可访问。
  • 本工具只迁移文件夹;单个大文件如需移动请用其它方式。
  • 软链接本身不占空间,但目标盘要预留足够容量存放被搬走的文件。
  • 迁移系统关键目录(如整个 AppData)有风险,请谨慎并提前备份。

七、故障排查

现象 原因 / 处理
启动报 No module named tkinter 用了不含 tkinter 的 Python。改用系统 Python:C:\Python313\python.exe 脚本路径
点「上级」没反应 旧版曾因扫描阻塞;现版已改为缓存秒切。若仍异常,点「刷新」重试
列表显示「计算中...」很久 大目录首次扫描耗时;已扫描目录会进缓存,之后即时显示
迁移失败提示「源目录仍有残留文件」 该目录正被程序占用。关闭占用程序(或重启后)重试
迁移后原路径打不开 目标盘被拔出/脱机,重新连接目标盘即可
误迁移想还原 把目标文件夹内容移回原位置,再删除原位置的软链接(junction)即可

八、文件清单

文件 说明
c_drive_migrator.py 程序主文件(图形界面 + 迁移逻辑)
c_drive_migrator_说明.md 本说明文档
相关推荐
idcu19 分钟前
CodeSchema 开源首发:一个给 AI 编码助手「喂」精准代码上下文的索引服务
开源·go·ai编程
对象存储与RustFS41 分钟前
给 RustFS 拆多租户权限:IAM 用户、组与策略的实战
后端·rust·开源
2601_962100731 小时前
2026年健康科普短视频怎么拍:手机拍摄规范与开源半自动工作流复盘
智能手机·开源·音视频
redfred1 小时前
Koodo Reader 使用教程:开源电子书阅读器 epub/pdf/mobi/azw3 全格式 多端同步 AI翻译 笔记高亮
人工智能·pdf·开源
数学人学c语言2 小时前
OpenDM05-Memory 训练开源
机器人·开源
飞多学堂2 小时前
每日开源硬件精选简报 2026-08-21
开源·开源硬件·硬件开源·电子制作
zzzzzz3103 小时前
react-bits:从 36K stars 的“酷炫组件”,看动效如何成为 React 的可复用能力
react.js·开源·动效
Flynt12 小时前
browser-use团队新作:让编程Agent帮你剪视频,核心设计思路有点意思
开源·agent·claude
分布式存储与RustFS12 小时前
RustFS 生命周期与分层:让冷数据自动搬家、热数据自己回家
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准