扫描 Windows 个人目录(桌面 / 文档 / 下载 / 图片 / 视频 / 音乐)中的大文件,
预览后移动到其他磁盘(默认 D:)的 <目标盘>:\FileOrganizer\<分类>\<来源>\ 目录,释放 C 盘空间。
安全第一:本工具只做 MOVE(移动),绝不删除任何文件; 默认只扫描预览(Dry Run,绝对零文件系统副作用),只有你输入 Y 才会真正移动。
- 把
FileOrganizer.ps1保存到任意非系统盘目录(例如D:\Tools\FileOrganizer\)。 - 文件必须是 UTF-8 with BOM 编码(交付版本已带 BOM,直接保存即可)。
- 若首次运行报"禁止运行脚本",先执行一次:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
| 参数 | 默认 | 说明 |
|---|---|---|
-DryRun |
关 | 严格预览:扫描+分析+显示后直接退出,零文件系统副作用 |
-MinSizeMB |
100 | 最小文件大小阈值(MB),只处理 ≥ 该值的文件 |
-TargetDrive |
自动 | 目标盘(排除 C:,优先 D:,其次剩余空间最大的非 C 盘) |
-CreateShortcuts |
关 | 移动后在原位置创建 .lnk( |
-SourcePaths |
6 个个人目录 | 自定义扫描目录;仅允许当前用户主目录(C:\Users<当前用户>\)下的路径,其他一律拒绝 |
-ScanLargeFiles |
关 | 扩大扫描范围;额外发现的目录一律 [REPORT ONLY] 仅报告、不移动 |
-MinFreeSpaceGB |
5 | 目标盘安全余量(GB):移动任何文件前要求 目标盘剩余 - 本文件大小 ≥ 该值 |
-AutoRenameConflicts |
关 | 目标已存在时自动加 (1)(2)... 后缀移动(默认跳过;两种模式都不覆盖) |
-SourcePaths 只能指定当前 Windows 用户主目录下的路径:
- ✅ 允许:
C:\Users\<当前用户>\Desktop、Documents、Downloads、Pictures、Videos、Music,及其子目录(如C:\Users\<当前用户>\Downloads\Test) - ❌ 拒绝(显示拒绝原因,不扫描、不移动、不猜测用户意图):
- 非 C 盘路径:
D:\Test、E:\Test、F:\Test - 系统目录:
C:\Windows、C:\Program Files、C:\Program Files (x86)、C:\ProgramData - 用户系统目录:
C:\Users\<用户>\AppData(含其他用户目录) - 游戏/云同步:Steam、Epic、Xbox、Battle.net、Riot、EA、Ubisoft、GOG、OneDrive、Google Drive、Dropbox、iCloud 等
- 非 C 盘路径:
.\FileOrganizer.ps1 # 默认 Dry Run:扫描 + 预览 + 询问
.\FileOrganizer.ps1 -DryRun -MinSizeMB 500 # 严格预览:只看 >= 500MB,不询问不落盘
.\FileOrganizer.ps1 -MinSizeMB 100 -TargetDrive D: # 预览确认后执行(输入 Y 才移动)
.\FileOrganizer.ps1 -MinSizeMB 1024 # 阈值改为 1GB
.\FileOrganizer.ps1 -TargetDrive E: -MinFreeSpaceGB 10 # 目标盘 E:,至少保留 10GB
.\FileOrganizer.ps1 -AutoRenameConflicts # 冲突时自动加 (1)(2),不覆盖(默认跳过)
.\FileOrganizer.ps1 -CreateShortcuts # 执行并在原位置建 .lnk(会写 C 盘)
.\FileOrganizer.ps1 -ScanLargeFiles # 扩大扫描:额外目录仅报告,不移动
.\FileOrganizer.ps1 -SourcePaths "C:\Users\<你的用户名>\Downloads\Test" # 仅限当前用户主目录下路径交互选项:[Y] 执行迁移(只有输入 Y 才移动) / [N] 取消 / [R] 重新扫描 / [D] 修改阈值。
-DryRun 模式下只做:扫描、分析、计算、显示。禁止一切文件系统写入:
- ❌ 不创建
D:\FileOrganizer\ - ❌ 不创建 Logs 文件夹 / 日志文件
- ❌ 不创建任何目标分类 / 来源文件夹
- ❌ 不创建快捷方式
- ❌ 不移动 / 不修改 / 不删除任何文件或目录
Dry Run 的日志只输出到控制台,不生成 .log 文件。
D:\FileOrganizer\
├─ Videos\
│ ├─ Downloads\movie.mp4 ← C:\Users\...\Downloads\movie.mp4
│ ├─ Desktop\movie.mp4 ← C:\Users\...\Desktop\movie.mp4
│ └─ Videos\movie.mp4 ← C:\Users\...\Videos\movie.mp4
├─ Images\
│ └─ Pictures\photo.jpg
├─ Documents\
│ └─ Documents\report.pdf
├─ Music\
│ └─ Music\song.flac
├─ Archives\
│ └─ Downloads\backup.zip
├─ Installers\
│ └─ Downloads\setup.msi
├─ Other\
│ └─ Downloads\unknown.xyz
└─ Logs\ ← 仅执行模式创建
└─ Reports\ ← 仅执行模式创建(HTML 可视化报告)
- 来源子目录避免不同来源的同名文件冲突;
- 不强制创建所有文件夹,只有真正移动了文件时才按需创建;
- 没有任何文件需要移动时,不创建任何目录。
- 不整批预检:每个文件移动前单独检查目标盘当前剩余空间。
- 条件:
目标盘剩余空间 - 本文件大小 ≥ MinFreeSpaceGB(默认 5GB)。 - 不满足 → 停止后续移动;已成功移动的文件保留、不回滚。
- 报告中单独统计"因目标盘空间不足跳过/未处理 N 个"。
- 例如目标盘只剩 6GB、余量 5GB → 最多只能再放约 1GB 的文件。
-ScanLargeFiles 额外扫描用户主目录下除 AppData / 云同步 / 隐藏项外的其他一级目录
(绝不扫描 Windows / Program Files)。这些额外目录中的文件一律标记为 [REPORT ONLY]:
- 预览中单独分区显示(大文件清单);
- 绝不自动移动——包括开发环境、虚拟机、数据库、项目目录、软件数据、游戏数据、 云同步数据、用途不明的文件夹;
- 只有默认 6 个个人目录(及
-SourcePaths显式指定的目录)内的文件才允许移动。
- 执行模式:日志保存到实际目标盘(不硬编码 D:):
- 目标盘 D: →
D:\FileOrganizer\Logs\FileOrganizer_<日期>_<时间>.log - 目标盘 E: →
E:\FileOrganizer\Logs\FileOrganizer_<日期>_<时间>.log - 目标盘不可写时回退到其他非 C 盘;全部失败则只输出控制台(绝不写 C 盘)。
- 目标盘 D: →
- Dry Run:不生成日志文件,只在控制台输出一行摘要。
- 日志内容:运行时间、运行模式、源目录、目标盘、阈值、快捷方式模式、冲突处理模式、安全余量、
候选数量、成功/跳过/失败数、实际释放空间;每个文件记录
FROM / TO / SIZE / CATEGORY / STATUS / REASON。
执行完成后自动生成 HTML 报告到实际目标盘:<目标盘>:\FileOrganizer\Reports\FileOrganizer_<日期>_<时间>.html:
- 执行总览(目标盘 / 阈值 / 安全余量 / C 盘前后空间 / 实际增加 / 成功移动大小)
- 逐文件处理结果表格(状态:SUCCESS / SKIPPED / FAILED,含分类、来源、目标路径、原因)
- 统计汇总;浏览器直接打开即可查看
Dry Run 模式不生成报告文件(保持"绝对零文件系统副作用"原则)。
| 工具 | 定位 | 与 FileOrganizer 的差异 |
|---|---|---|
| PSArrange | 按 JSON 规则整理文件 | 通用整理器,不限制源盘;可配置性高但配置复杂 |
| c-drive-cleaner-skill | C 盘诊断 + 迁移规划 | 偏诊断报告,迁移是规划性的 |
| CleanMyPC-PS | C 盘清理 | 会删除缓存/临时文件(本工具只 MOVE 不 DELETE) |
| safe_move_with_symlink | 目录迁移 + 符号链接 | 移动目录、需管理员权限(本工具只移动文件、普通权限) |
本工具的定位:C 盘个人文件纯迁移工具——零删除、最保守(SourcePaths 锁 C 盘用户目录、 .exe/.dll/.sys 黑名单、目标盘绝不允许 C、逐文件空间余量检查、Dry Run 零副作用)、普通权限即可运行。
预览阶段显示"执行前总览":源盘、目标盘、最小文件大小、预计候选文件数、 预计迁移大小、目标盘当前可用、预计迁移后目标盘剩余、预计释放 C 盘、 快捷方式状态、Dry Run 状态。确认无误后输入 Y 才执行。
真实迁移过程中按 Ctrl+C:
- 不删除 / 不回滚已移动的文件;
- 当前文件处理完(或未开始)后停止;
- 记录
INTERRUPTED,输出:已成功移动 X 个 / 已释放 X GB / 剩余未处理 X 个。
默认 CreateShortcuts = false:移动后 C 盘原位置什么都不创建。
仅当显式传入 -CreateShortcuts 时,移动后才会在原位置创建 .lnk 指向新文件,并明确警告:
WARNING: 此模式会在 C 盘原位置写入 .lnk 快捷方式文件!
快捷方式创建失败不影响移动结果(日志分别记录 MOVE=SUCCESS / SHORTCUT=FAILED)。
| 类别 | 内容 |
|---|---|
| 系统目录 | Windows、Program Files、(x86)、ProgramData、$Recycle.Bin、System Volume Information 等 |
| 用户系统目录 | AppData(程序依赖路径,绝不操作) |
| 系统文件 | pagefile.sys / hiberfil.sys / swapfile.sys、隐藏/系统属性文件、junction/符号链接 |
| 扩展名 | .exe .dll .sys .tmp .log .dat .db .lock .part .crdownload 等一律不移动 |
| 游戏目录 | Steam、Epic Games、Xbox、Battle.net、Riot、EA、Ubisoft、GOG 等 |
| 云同步目录 | OneDrive、Google Drive、Dropbox、iCloud(避免同步冲突) |
| 其他 | 桌面 .lnk、不移动任何文件夹本身(只移动文件) |
关于 .exe / .dll / .sys:默认全部禁止迁移(包括 Downloads 中的 setup.exe / installer.exe)。
若确需移动下载目录中的安装包,须手动从脚本 $script:ExtBlacklist 移除 '.exe'(风险自担)。
本工具尝试以独占方式打开文件来检测占用:能独占打开 → 视为可移动;无法访问或存在锁 定 → 跳过该文件。该检测无法保证 100% 判断文件是否正在使用,因此:
- 实际移动以
Move-Item的最终结果为准; - 移动失败 → 捕获异常,记录
FAILED,继续处理后续文件; - 不杀进程、不关闭软件、不解除文件锁。
执行前后各记录一次 C 盘可用空间,同时显示两个口径(两者可能略有差异,属正常):
C 盘执行前剩余 : 23.4 GB
C 盘执行后剩余 : 87.6 GB
C 盘实际增加 : 64.2 GB (AfterFree - BeforeFree,含系统波动)
成功移动文件总大小: 63.9 GB (按文件实际大小统计)
- 文件已被移动(原位置不存在)→ 不再处理;
- 目标文件已存在 →
SKIPPED,绝不覆盖; - 文件名冲突 → 默认跳过,不自动覆盖。
- 文件位置会变:移动后原路径不存在,快捷方式模式可在原处保留 .lnk。
- 极少数软件记录绝对路径(如播放器列表),移动后需重新指定。
- 本工具不删除任何文件,最坏情况是文件被移动到目标盘
FileOrganizer下,不会丢失。 - 建议:第一次真实运行前先用
-DryRun -MinSizeMB 500只看大文件清单, 或用-SourcePaths指向测试目录演练。
测试环境:
D:\FileOrganizer_TestEnv\模拟目录(非真实 C 盘个人文件)+ 函数级测试,PowerShell 5.1。 状态:✔ = 已实际运行验证;✘ = 未测/失败;— = 环境无法模拟。
| 项目 | 状态 | 说明 |
|---|---|---|
| Dry Run 零副作用 | ✔ | 扫描后源目录零变化、不创建 D:\FileOrganizer、无 .log 文件;真实用户目录 Dry Run 端到端同样零副作用 |
| 文件分类 | ✔ | 按扩展名分到 Documents/Images/Videos/Music/Archives/Installers/Other |
| 大小阈值 | ✔ | -MinSizeMB 只筛选 ≥ 阈值文件 |
| 目标结构 分类\来源 | ✔ | Downloads 的 movie.mp4 → Videos\Downloads\movie.mp4 |
| SourcePaths 限制 | ✔ | 允许当前用户主目录及其子目录;拒绝 D:/E:/F:、C:\Windows、C:\ProgramData、AppData、其他用户目录、游戏/云同步(均显示拒绝原因) |
| TargetDrive=C: | ✔ | C: C C:\ c:\ 全部拒绝(统一解析),绝不选 C:;不存在的盘回退;D:/E: 正常 |
| 文件移动 | ✔ | 中文/空格/括号路径正常(函数级) |
| 目标冲突 | ✔ | 目标已存在 → SKIPPED 不覆盖;-AutoRenameConflicts 时自动加 (1)(2) 且仍不覆盖 |
| 占用文件 | ✔ | 独占锁定 → SKIPPED;不杀进程 |
| 空间不足(含余量) | ✔ | 逐文件检查,不整批预检;不足→停止后续、保留已成功、报告未处理数 |
| HTML 报告 | ✔ | 执行模式生成到目标盘 Reports\,内容含总览/逐文件/统计;Dry Run 不生成(零副作用回归通过) |
| 快捷方式模式 | ✔(逻辑) | 沙箱禁 COM 时 MOVE=SUCCESS 与 SHORTCUT=FAILED 分离记录(真实终端待用户验证) |
| 重复运行 | ✔ | 幂等,第二次全部 SKIPPED |
| ScanLargeFiles | ✔ | 额外目录(实测 12 个:PycharmProjects/Netease/WPSDrive 等)标记 REPORT ONLY,不进入移动列表 |
| 日志 | ✔ | 写实际目标盘(D:\FileOrganizer\Logs\),C 盘无任何 FileOrganizer 目录;Dry Run 不落盘 |
| 目标盘不存在 | ✔ | Get-TargetDrive 'X:' → 回退自动选择 |
| Ctrl+C 中断 | — | 逻辑实现(CancelKeyPress 事件,PS5.1 可用),自动化环境无法模拟按键,待真实终端验证 |
- 这是"文件迁移工具",不是"垃圾清理工具"——禁止为释放空间删除文件。
- 不确定是否安全的文件:跳过;无法确定:不要猜、不要执行。
- 默认安全模式优先;宁可少移动,绝不误删、误移动、覆盖或破坏文件。