WinDirStat 2.9.3:从目录扫描到可复查的占用报表

开发机的磁盘问题常有两种表现:构建目录突然膨胀,或者项目已经移走,系统显示的可用空间却没有增加多少。只看资源管理器中的文件大小,很难同时回答"哪个目录增长了"和"这些文件实际占了多少磁盘"。WinDirStat 可以把目录树、文件类型和可视化放在同一份扫描结果中,再把结果保存下来,便于下一次对照。
本文以官方 v2.9.3 发行版和项目文档为依据,介绍怎样建立一次范围明确、口径一致的扫描,以及报表导出时容易忽略的限制。下列命令是文档用法示例,执行路径需要按自己的环境填写。
先固定范围和统计口径
排查单个项目时,先扫描工作目录,不必一开始就扫整块系统盘。在启动时的 Select Drives 中选择 Individual Folders,可以加入一个或多个文件夹。构建输出、依赖目录、日志目录分开放置的项目,可以把这些目录一起纳入;如果仅选择仓库根目录,位于别处的缓存不会进入这份统计。
应在记录中写清扫描路径、时间和大小口径。View 菜单提供 Use Physical Size 和 Use Logical Size:逻辑大小描述文件内容长度,物理大小更接近实际分配的空间。稀疏文件、压缩文件和分配单元都会使两个数字不同。分析磁盘还剩多少空间时,物理大小通常更有参考价值;研究产物内容规模时,逻辑大小更直观。比较前后结果时不要临时换口径。
硬链接也需要留意。多个路径可能指向同一份数据,按路径简单累加会高估真实占用。WinDirStat 有相应处理,但由此得出的数字仍然要结合扫描范围理解:只选部分目录时,结果并不是整个卷的账本。测试环境、生产数据目录和个人资料最好分别记录,避免把性质不同的数据混进同一个清理判断。
用列表定位,再用图验证分布

图1:结果窗口同时显示目录、文件类型和 Treemap。Physical Size 与 Logical Size 是不同口径;图中整盘行分别显示 9.63 GiB 和 19.65 GiB。
扫描完成后,可以从 All Files 的排序入手,逐层展开最大的目录;Largest Files 更适合直接找单个大文件。两者解决的问题不同:大量小日志可能让某个目录很大,却不会出现在单文件排行榜的最前面。按扩展名汇总则有助于发现视频、压缩包或某一类产物是否占了主要比例。
树状图中的矩形代表文件,面积反映当前大小口径,颜色对应文件类型,矩形的嵌套体现目录关系。点击醒目的区域,再回到列表核对完整路径,可以避免只凭颜色判断文件用途。同一种扩展名可能分别出现在开发缓存和个人归档中,颜色不能区分它们是否应该保留。
需要找特定对象时,可用 Ctrl+F 搜索。View 中还可切换 sunburst 或 flame graph,帮助从其他角度读目录层级。换图形不会补齐扫描时未读取到的文件,也不会改变一份快照的时间。先确认路径,再选适合自己的视图,比反复猜哪块颜色代表缓存更有效。

图2:展开 GoogleUpdater 的 crx_cache 后,可看到选中文件的物理大小为 498.41 MiB。记录完整路径与大小口径,才能在下一次扫描中对照同一对象。
报表导出:把一次判断留成快照
交互界面通过 File 下的 Save Results To CSV/JSON 保存扫描结果。导出文件适合记录某个时间点的目录状态,便于与后续扫描人工对照;它不会跟随磁盘变化自动更新。共享报表之前,应检查里面的路径和文件名是否包含项目、客户或个人信息。
命令行的 /SaveTo 可以直接写出报表并退出,不打开主窗口。官方语法是先给输出路径,再给扫描路径。下面用 PowerShell 显式等待进程结束,避免命令启动后就立即读取尚未写完的文件:
powershell
# 先创建 C:\Reports,并把程序路径替换为实际位置
$scanArguments = '/SaveTo "C:\Reports\scan.json" "C:\Data Folder"'
$scanProcess = Start-Process 'C:\Tools\WinDirStat.exe' `
-ArgumentList $scanArguments -WindowStyle Hidden -Wait -PassThru
$scanProcess.ExitCode
这里的目录只是示例。输出目录需要预先存在;程序路径和包含空格的参数也应检查引号。官方文档指出,/SaveTo 模式关闭重复检测。因此这份占用报表不能兼作完整查重结果。需要重复组报表时使用 /SaveDupesTo,权限报告另有 /SavePermsTo,应根据目的选择命令。
退出码为零说明报表写入成功,并不保证所有文件都能访问。读取报表时还应保留导出的结构:CSV 表头和 JSON 字段名称会受界面语言影响,不能先换了语言,再假定字段名与旧脚本一致。准备自动比较时,先保存样本并确认字段,而不是直接拿网上的解析代码套用。
重开结果与持续观察的边界
/LoadFrom 用于重开已保存的扫描树。它适合查看旧结果,但旧快照不等于当前磁盘。重复组或权限报表也不能因为同样是 CSV、JSON,就当成可重新加载的扫描树。管理多份结果时,用时间、范围和口径命名,能减少拿错报表的问题。
File Watcher 用来观察文件变化事件。它记录到新增或修改,并不代表所有统计总量已经同步刷新。项目重新构建、移动大文件或删除缓存之后,仍需刷新相应结果,再评估空间变化。如果希望对照两次构建,最好在构建结束且写入趋于稳定之后分别扫描,避免把扫描期间持续增长的日志当作固定值。
整盘统计中的 Unknown 也不是一个能直接删除的文件夹。它代表 Windows 报告的已用空间与已经统计的文件之间的差额,可能涉及文件系统元数据、权限、排除条件、还原点或扫描期间的变化。出现差额时,先检查这些边界,再决定是否需要扩大范围或调整权限。
版本选择与结果复核
普通 Intel、AMD 的 64 位 Windows 设备通常选择 x64 MSI,Windows on ARM 选择 ARM64,32 位 Windows 对应 x86。官方也提供 MSIX、组合包和便携压缩包;便携包解压后仍需选择对应架构的程序。DebugSymbols 是调试符号,Hashes 是校验资料,二者不是普通用户的安装入口。
2.9.3 的官方更新涉及 NTFS 直接卷扫描、File Watcher 内存使用、枚举与过滤分配,并修复横向滚动列对齐。它们说明版本变化的方向,不能据此填写某台机器的加速百分比。本地 NTFS 整盘需要相应权限时,可使用 File > Run Elevated;扫描更快也不代表操作系统目录可以随意删除。
对开发目录而言,最后一步应是到资源管理器确认对象,再通过项目或应用自己的流程处理。数据库文件、虚拟机磁盘和同步目录即使很大,也可能正在被使用。保留有用结果、处理已经确认的对象、重新扫描同一范围,才能知道自己的操作是否解决了原来的占用问题。
获取软件
百度网盘:https://pan.baidu.com/s/1MtWEpMArLVWjAalfd3HosA?pwd=ynxj 提取码:ynxj
夸克网盘:https://pan.quark.cn/s/ed7dbcd88603
项目按 GPL v3 或更高版本提供。GitHub 仓库:https://github.com/windirstat/windirstat