NTFS 卷上的文件总数?

Mar*_*tin 9 windows ntfs

我正在寻找一种快速计算任何 NTFS 卷上文件和目录总数的方法。(以一种特别的方式。也就是说,给定任何随机框,而不是专门准备的卷。)

注意:这与每个目录的文件无关,只是卷上的文件总数。

目前,我知道的唯一方法是在 Windows 资源管理器中打开驱动器的根文件夹选择所有元素,右键单击以选择“属性”,然后等待(并等待)直到资源管理器计算完所有元素。

有没有更好/更快的方法?

use*_*686 11

如果你只想要一个上限(近似值):

fsutil fsinfo ntfsinfo C:命令提示符中输入,读取Mft Valid Data Length值,然后除以 1024。

请注意,这个数字大致是给定文件系统必须跟踪的文件和文件夹数量的“高水位线”。举个例子,如果你用200万个小临时文件装满你的驱动器,然后删除它们,Mft Valid Data Length不会缩小,并且值会比实际值大200万左右。

如果你需要一个确切的值,有更快的方法,但你需要编程(我不知道有任何程序可以精确地做到这一点)......你需要阅读 $MFT 文件并解析手动,然后找出哪些是文件条目,哪些是非文件条目……它比 Windows 的“自上而下”方法快得多(因为自下而上构建层次结构仅使用 MFT 而没有其他任何东西) ,但这绝非易事。

如果你是一名程序员,但你想要一种不那么痛苦(虽然更慢)的方式,你也可以编写一个程序来调用NtQueryDirectoryFile遍历文件夹而不是默认FindFirstFile/FindNextFile函数......它可以快得多但多一点棘手。


请注意,“文件”本身的概念实际上非常棘手。很有可能(Windows 甚至默认情况下会这样做)有多个硬链接到同一个文件,并且它们都与任何其他文件一样“真实”......你计算它们一次还是两次?

或者你可以有指向其他地方的交叉点或符号链接......这些应该算还是不算?

乍一看,这并不是一个明确的过程,因此请注意这一点。

希望有帮助..


编辑

你可以跑

 robocopy /L /E C:\ C:\Temp > "%Temp%\Temp.log"
Run Code Online (Sandbox Code Playgroud)

然后检查显示的“文件”统计信息。:P


Ran*_*son 9

在 DOS 提示符下,键入以下命令:

  • 目录 \ /s /a /w

(“/s”开关启用对所有子目录的递归搜索{对于大多数 Unix 实用程序,这通常是“-R”开关},“/a”开关计算所有文件而不管属性,而“/w " 在一行上显示多个条目,以便报告完成得更快一点。将“\”更改为您希望从其开始的所需路径;对于不同的驱动器号,例如驱动器 D:,将其更改为“D :\" 来搜索该驱动器。)

完成后,您将返回提示,然后输出的最后两行将显示文件总数和目录总数的计数。如果您要查找文件名条目的总数,则只需将这两个数字相加即可,否则您只需要文件总数即可。