CMD 使用 DIR 按名称排序目录

Pau*_*ing 3 windows-7 ntfs command-line dir fat32

我正在使用以下命令列出文件,包括按名称排序的子目录中的文件。

dir /b/s/on
Run Code Online (Sandbox Code Playgroud)

文件在其给定目录中正确排序,但目录未排序。目录似乎按最后修改日期排序。

是否dir也可以对目录进行排序?

这是输出的一部分(混淆)的屏幕截图:

在此处输入图片说明

Nic*_*ton 5

dir正在对目录进行树形遍历,但仅对叶目录中的条目进行排序。这是一个问题,因为它是一个 FAT 文件系统。在 FAT 文件系统上,任何给定目录中的条目都是未排序的,导致树遍历未排序。相反,NTFS 目录总是排序的。

你有几个解决方案。最简单的方法是通过管道输出sort

dir /b/s | sort
Run Code Online (Sandbox Code Playgroud)

(如果您习惯于进行sort订购,则无需/on选择dir。)

您的另一种选择是使用 Unix-style ls,这肯定会正确。例如lsCygwin或我自己的Hamilton C shell 中

  • 与 NTFS 不同,FAT 和 FAT32 目录条目是无序的。它们按照添加的顺序排列。(如果您从 NTFS 复制目录,它们将被排序。)在过去的 DOS 时代,人们过去常常使用目录排序器对磁盘上的条目进行排序,以便在列出时按顺序排列。 (2认同)
  • 这是一个[已知问题](http://support.microsoft.com/kb/135604),如果您对 FAT 目录进行树形遍历,`dir` 不会对整个树进行排序,只会对叶目录进行排序。[FAT 目录结构没有组织](http://support.microsoft.com/kb/100108)。相比之下,[NTFS 目录使用一种称为 B 树的特殊数据管理结构......目录本质上是“自排序”](http://www.dewassoc.com/kbase/windows_nt/ntfs_directories_and_files.htm)。 (2认同)