不会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\你的用户名 (状态栏) │
└──────────────────────────────────────────────────────────┘
操作步骤
-
启动 :打开即列出
C:\Users各用户目录及其占用。 -
下钻:双击某目录 → 查看其子文件夹占用。
-
返回:点「← 上级」回到上一级(已扫描过的秒回)。
-
重算:点「刷新」强制重新统计当前目录。
-
迁移(核心):
-
在要迁移的目录行上右键 → 选「一键迁移到 C 盘(软链接)」。
-
在弹出的文件夹选择框里选定目标父文件夹 (如
D:\备份)。- 脚本会把源目录以原名 建在其下,例如选
D:\备份则目标为D:\备份\Downloads。
- 脚本会把源目录以原名 建在其下,例如选
-
确认弹窗显示「源 / 目标 / 大小」,点「是」继续。
-
等待进度窗完成 → 看到「迁移完成」提示。
-
列表中原目录变为
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 |
本说明文档 |