Skip to content

About

C 盘文件自动整理工具(PowerShell):按规则归类文件,支持 Dry Run 预览,整理 C 盘更安心

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

FileOrganizer.ps1 — C 盘个人文件安全迁移工具

扫描 Windows 个人目录(桌面 / 文档 / 下载 / 图片 / 视频 / 音乐)中的大文件, 预览后移动到其他磁盘(默认 D:)的 <目标盘>:\FileOrganizer\<分类>\<来源>\ 目录,释放 C 盘空间。

安全第一:本工具只做 MOVE(移动),绝不删除任何文件; 默认只扫描预览(Dry Run,绝对零文件系统副作用),只有你输入 Y 才会真正移动。


一、如何保存

  1. 把 FileOrganizer.ps1 保存到任意非系统盘目录(例如 D:\Tools\FileOrganizer\)。
  2. 文件必须是 UTF-8 with BOM 编码(交付版本已带 BOM,直接保存即可)。
  3. 若首次运行报"禁止运行脚本",先执行一次:
    Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

二、参数说明

参数 默认 说明
-DryRun 关 严格预览:扫描+分析+显示后直接退出,零文件系统副作用
-MinSizeMB 100 最小文件大小阈值(MB),只处理 ≥ 该值的文件
-TargetDrive 自动 目标盘(排除 C:,优先 D:,其次剩余空间最大的非 C 盘)
-CreateShortcuts 关 移动后在原位置创建 .lnk(⚠️ 会向 C 盘写入快捷方式文件)
-SourcePaths 6 个个人目录 自定义扫描目录;仅允许当前用户主目录(C:\Users<当前用户>\)下的路径,其他一律拒绝
-ScanLargeFiles 关 扩大扫描范围;额外发现的目录一律 [REPORT ONLY] 仅报告、不移动
-MinFreeSpaceGB 5 目标盘安全余量(GB):移动任何文件前要求 目标盘剩余 - 本文件大小 ≥ 该值
-AutoRenameConflicts 关 目标已存在时自动加 (1)(2)... 后缀移动(默认跳过;两种模式都不覆盖)

二·五、SourcePaths 安全限制(重要)

-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 等

三、运行示例

.\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] 修改阈值。

四、Dry Run = 绝对零副作用

-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 = 扩大"发现",不扩大"移动"

-ScanLargeFiles 额外扫描用户主目录下除 AppData / 云同步 / 隐藏项外的其他一级目录 (绝不扫描 Windows / Program Files)。这些额外目录中的文件一律标记为 [REPORT ONLY]:

  • 预览中单独分区显示(大文件清单);
  • 绝不自动移动——包括开发环境、虚拟机、数据库、项目目录、软件数据、游戏数据、 云同步数据、用途不明的文件夹;
  • 只有默认 6 个个人目录(及 -SourcePaths 显式指定的目录)内的文件才允许移动。

八、日志

  • 执行模式:日志保存到实际目标盘(不硬编码 D:):
    • 目标盘 D: → D:\FileOrganizer\Logs\FileOrganizer_<日期>_<时间>.log
    • 目标盘 E: → E:\FileOrganizer\Logs\FileOrganizer_<日期>_<时间>.log
    • 目标盘不可写时回退到其他非 C 盘;全部失败则只输出控制台(绝不写 C 盘)。
  • Dry Run:不生成日志文件,只在控制台输出一行摘要。
  • 日志内容:运行时间、运行模式、源目录、目标盘、阈值、快捷方式模式、冲突处理模式、安全余量、 候选数量、成功/跳过/失败数、实际释放空间;每个文件记录 FROM / TO / SIZE / CATEGORY / STATUS / REASON。

八·五、HTML 可视化报告(执行模式)

执行完成后自动生成 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 零副作用)、普通权限即可运行。

九、执行确认(输入 Y 之前)

预览阶段显示"执行前总览":源盘、目标盘、最小文件大小、预计候选文件数、 预计迁移大小、目标盘当前可用、预计迁移后目标盘剩余、预计释放 C 盘、 快捷方式状态、Dry Run 状态。确认无误后输入 Y 才执行。

十、Ctrl+C 安全中断

真实迁移过程中按 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 盘可用空间,同时显示两个口径(两者可能略有差异,属正常):

C 盘执行前剩余   : 23.4 GB
C 盘执行后剩余   : 87.6 GB
C 盘实际增加     : 64.2 GB   (AfterFree - BeforeFree,含系统波动)
成功移动文件总大小: 63.9 GB   (按文件实际大小统计)

十五、重复运行(幂等)

  • 文件已被移动(原位置不存在)→ 不再处理;
  • 目标文件已存在 → SKIPPED,绝不覆盖;
  • 文件名冲突 → 默认跳过,不自动覆盖。

十六、风险说明

  1. 文件位置会变:移动后原路径不存在,快捷方式模式可在原处保留 .lnk。
  2. 极少数软件记录绝对路径(如播放器列表),移动后需重新指定。
  3. 本工具不删除任何文件,最坏情况是文件被移动到目标盘 FileOrganizer 下,不会丢失。
  4. 建议:第一次真实运行前先用 -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 可用),自动化环境无法模拟按键,待真实终端验证

十八、最终原则

  • 这是"文件迁移工具",不是"垃圾清理工具"——禁止为释放空间删除文件。
  • 不确定是否安全的文件:跳过;无法确定:不要猜、不要执行。
  • 默认安全模式优先;宁可少移动,绝不误删、误移动、覆盖或破坏文件。

About

C 盘文件自动整理工具(PowerShell):按规则归类文件,支持 Dry Run 预览,整理 C 盘更安心

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages