NTFS 卷上的文件总数?

NTFS 卷上的文件总数?

我正在寻找快速地计算任何 NTFS 卷上的文件和目录总数的方法。(以临时方式。即,给定任何随机框,而不是特别准备的卷。)

注意:这是不是关于每个目录的文件数,仅指卷上的文件总量。

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

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

答案1

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

  • 目录 \ /s /a /w

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

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

答案2

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

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"

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

答案3

简单的答案是;下载一切。它能帮您计算,速度超快。还能帮您进行实时搜索。它是免费软件,不包含任何额外的废话。

答案4

看来,更正确的方法是

dir /a /b /s \ | find /c /v ""

使用裸格式(每行一个文件)递归列出所有(/a)文件( ) 。之后,使用特殊窗口/s\b黑客计算文件中的行数。

裸格式不显示文件的统计信息,因此速度更快,将标准输出重定向到另一个程序将减少显示不必要信息的时间。

相关内容