dir(directory) 命令是一个在命令行界面(如Windows的命令提示符或PowerShell)中使用的命令,用于显示指定目录中的文件和子目录列表。它还可以显示文件的属性,如大小、创建时间、最后访问时间等。

dir | Microsoft Learn

 

PixPin_2026-06-14_13-37-08

Windows 系统中的 dir(directory) 命令  directory(意为“目录”) 的缩写,其完整名称通常表述为 Directory Command(目录命令),也有部分早期系统中将其视为 Disk Directory(磁盘目录)的缩写。

它是Windows命令行环境(CMD、PowerShell)内置的核心命令之一,主要用于列出指定路径下的文件、子目录的相关信息,包括名称、大小、修改时间、属性等。


C:\Users\Administrator>dir /?
显示目录中的文件和子目录列表。

DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N] [/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]

  [drive:][path][filename]  指定要列出的驱动器、目录和/或文件。

  DIR  /A          显示具有指定属性的文件。
  属性         D  目录                R  只读文件
               H  隐藏文件            A  准备存档的文件
               S  系统文件            I  无内容索引文件
               L  重新分析点          O  脱机文件
               -  表示“否”的前缀
  DIR  /B          使用空格式(没有标题信息或摘要)。
 DIR   /C          在文件大小中显示千位数分隔符。这是默认值。用 /-C 来禁用分隔符显示。
 DIR   /D          跟宽式相同,但文件是按栏分类列出的。
 DIR   /L          用小写。
 DIR   /N          新的长列表格式,其中文件名在最右边。
 DIR   /O          用分类顺序列出文件。
  排列顺序     N  按名称(字母顺序)     S  按大小(从小到大)
               E  按扩展名(字母顺序)   D  按日期/时间(从先到后)
               G  组目录优先           -  反转顺序的前缀
 DIR   /P          在每个信息屏幕后暂停。
 DIR   /Q          显示文件所有者。
 DIR   /R          显示文件的备用数据流。
 DIR   /S          显示指定目录和所有子目录中的文件。
 DIR   /T          控制显示或用来分类的时间字符域
  时间段      C  创建时间
              A  上次访问时间
              W  上次写入的时间
 DIR   /W          用宽列表格式。
 DIR   /X          显示为非 8dot3 文件名产生的短名称。格式是 /N 的格式, 短名称插在长名称前面。如果没有短名称,在其位置则 显示空白。
 DIR   /4          以四位数字显示年份

可以在 DIRCMD 环境变量中预先设定开关。通过添加前缀 - (破折号)来替代预先设定的开关。例如,/-W。


dir(directory) 命令是用于显示目录列表的命令,主要在 Windows 和 DOS 系统中使用。不同版本的操作系统可能对 dir 命令有不同的选项、功能和格式支持。以下是基于不同版本的 Windows 操作系统中 dir(directory) 命令的差异表格:

特性/版本 Windows 95/98/ME Windows XP/2000 Windows Vista/7/8/10/11 Windows PowerShell
基本功能 显示目录中的文件和文件夹列表 显示目录中的文件和文件夹列表 显示目录中的文件和文件夹列表 显示目录中的文件和文件夹列表
/A 支持:显示所有文件(包括隐藏和系统文件) 支持:显示所有文件(包括隐藏和系统文件) 支持:显示所有文件(包括隐藏和系统文件) 支持:显示所有文件(包括隐藏和系统文件)
/B 不支持 支持:简洁显示,不包括头部、尾部和总结信息 支持:简洁显示,不包括头部、尾部和总结信息 支持:简洁显示,不包括头部、尾部和总结信息
/O 不支持 支持:按字母顺序排序 支持:按字母顺序排序,支持更多的排序选项 支持:按字母顺序排序,支持更多的排序选项
/S 支持:列出指定目录及所有子目录中的文件和文件夹 支持:列出指定目录及所有子目录中的文件和文件夹 支持:列出指定目录及所有子目录中的文件和文件夹 支持:列出指定目录及所有子目录中的文件和文件夹
/P 支持:逐页显示文件 支持:逐页显示文件 支持:逐页显示文件 支持:逐页显示文件
/T 不支持 不支持 支持:显示文件的创建时间、上次访问时间和修改时间 支持:显示文件的创建时间、上次访问时间和修改时间
/Q 不支持 不支持 支持:显示文件的所有者信息 支持:显示文件的所有者信息
/L 不支持 不支持 支持:以小写字母显示文件和文件夹 支持:以小写字母显示文件和文件夹
/W 支持:以宽格式显示文件 支持:以宽格式显示文件 支持:以宽格式显示文件 不支持
/X 不支持 不支持 支持:显示文件的 8.3 格式名称(短文件名) 支持:显示文件的 8.3 格式名称(短文件名)
/C 不支持 支持:显示文件的大小时使用千位分隔符 支持:显示文件的大小时使用千位分隔符 支持:显示文件的大小时使用千位分隔符
/H 支持:显示隐藏文件 支持:显示隐藏文件 支持:显示隐藏文件 支持:显示隐藏文件
/I 不支持 不支持 支持:指定文件夹是否递归深入查找(针对目录) 不支持
/D 不支持 不支持 支持:按日期排序 支持:按日期排序
/F 不支持 不支持 支持:按文件的完全路径显示文件名 支持:按文件的完全路径显示文件名
/G 不支持 不支持 支持:按类型和大小进行分组显示 不支持
/N 不支持 不支持 支持:按文件名显示(包括排序) 不支持
/E 不支持 不支持 支持:将文件内容以 HTML 格式输出 不支持

总结:

  • Windows 95/98/ME:支持基本的 dir 命令选项,如 /A(显示所有文件)、/P(逐页显示)等,但功能较为有限,不支持一些新的选项如 /T(显示时间)和 /Q(显示所有者)。

  • Windows XP/2000:相比早期版本,XP/2000 增加了一些实用的选项,例如 /O(排序),允许按字母顺序排序文件和文件夹,同时也支持显示文件的所有者信息。

  • Windows Vista/7/8/10/11:提供了丰富的功能,支持 /T(时间显示)、/Q(显示文件所有者)、/X(显示短文件名)等,功能较为全面。

  • Windows PowerShell:除了支持传统的 dir 命令选项外,PowerShell 提供了更强大的文件和目录管理功能,支持更多的格式化选项(例如 /B 选项)和属性。


dir(directory) 命令的详细参数信息,以下是按功能分类的表格,列出了每个选项及其功能:

功能类别 选项 说明
基本功能 /A 显示具有指定属性的文件。属性可以是:D(目录)、R(只读文件)、H(隐藏文件)、A(准备归档的文件)、S(系统文件)、I(未内容索引文件)、L(重解析点)、O(脱机文件)。- 前缀表示排除指定的属性。
  /B 使用裸格式(不显示头部信息和总结)。
  /C 显示文件大小时使用千位分隔符(默认)。使用 /C 显示分隔符,使用 /-C 禁用分隔符。
  /D 与宽格式(/W)相同,但文件按列排序显示。
  /L 使用小写字母显示文件名。
  /N 新的长格式,文件名显示在最右边。
排序功能 /O 按指定顺序排序文件。排序方式包括:N(按名称排序)、S(按大小排序)、E(按扩展名排序)、D(按日期/时间排序)、G(先列出目录)、-(反向排序)。
显示文件信息 /Q 显示文件的所有者信息。
  /R 显示文件的备用数据流。
目录和子目录 /S 显示指定目录及其所有子目录中的文件。
时间控制 /T 控制显示的时间字段或用于排序的时间字段。字段包括:C(创建时间)、A(最后访问时间)、W(最后写入时间)。
分页显示 /P 每屏暂停一次显示,直到用户按下任意键。
显示格式 /W 使用宽格式显示文件。
显示短文件名 /X 显示非 8.3 文件名生成的短文件名,格式为 /N,短文件名显示在长文件名前。如果没有短文件名,则显示空格。
年份格式 /4 显示四位数年份。

其他信息

  • [drive:][path][filename]: 指定要列出文件的驱动器、目录和/或文件名。
  • 环境变量:可以通过 DIRCMD 环境变量预设某些 DIR 命令的开关。通过在开关前加 -(连字符)来覆盖预设的开关,例如 /W 可被 /W- 覆盖。

备注:

  1. /A 选项非常灵活,允许你显示具有特定属性的文件,属性可以组合使用。例如 /A:R 可以列出只读文件,/A:D 列出目录。
  2. /O 选项提供了按多种方式排序文件的能力(如按名称、大小、日期等),并且可以通过 - 前缀来反向排序。
  3. /T 选项用于控制时间信息的显示(如创建时间、访问时间或写入时间),在排序时也会使用这些时间字段。

这个表格将帮助你更好地理解如何使用 DIR 命令的不同选项,以便根据需求列出和管理文件。


dir(directory) 命令是一个在命令行界面(如Windows的命令提示符或PowerShell)中使用的命令,用于显示指定目录中的文件和子目录列表。它还可以显示文件的属性,如大小、创建时间、最后访问时间等。

这个命令通常被用来浏览文件系统中的内容,帮助用户了解当前目录中有哪些文件和文件夹,以及它们的属性。它也可以在编写批处理脚本或自动化任务时作为一个工具来使用。

使用 dir(directory) 命令可以快速查看文件系统的结构,帮助用户进行文件管理、定位特定文件或检查目录中的内容,是命令行操作系统中的常用工具之一。


dir(directory) 命令的起源可以追溯到早期的操作系统,特别是DOS(Disk Operating System)和类似的命令行界面。DOS是20世纪80年代和90年代早期个人计算机上最流行的操作系统之一,它使用了命令行界面而不是如今常见的图形用户界面(GUI)。

在DOS中,dir(directory) 命令用于列出目录中的文件和子目录。它是用户浏览文件系统内容的主要方法之一,因为DOS没有图形界面,用户需要通过键入命令来执行各种操作。

随着时间的推移,dir(directory) 命令被继承到了后来的Windows操作系统中,并成为了Windows命令行界面的一部分。即使在现代的Windows系统中,dir 命令仍然是一个常见且有用的工具,用于在命令提示符或PowerShell中浏览文件系统的内容。

因此,dir(directory) 命令的起源可以追溯到DOS和早期的命令行操作系统,它是命令行用户界面中的一个重要组成部分,为用户提供了快速查看文件系统内容的方式。


dir(directory) 命令在其发展过程中经历了几个阶段,从最初简单的文件列表到具有更多功能和选项的强大工具。以下是 dir 命令的一些主要发展阶段:

  1. 初期阶段(早期的DOS): 最初的 dir 命令是在早期的DOS系统中引入的,它用于列出当前目录中的文件和子目录。这个命令非常基础,只能显示文件名和文件夹名,以及一些基本的属性信息,如文件大小和创建日期。

  2. 增强功能(后来的DOS和Windows): 随着操作系统的发展,dir 命令逐渐增加了更多的功能和选项。用户可以通过不同的参数来控制输出的格式,例如,列出隐藏文件、显示详细属性、按不同的排序方式等。

  3. 适应新技术(现代Windows): 随着Windows操作系统的发展,dir 命令也适应了新的技术和文件系统。例如,在支持长文件名和Unicode字符的系统上,dir 命令可以正确地处理这些文件名,确保输出信息的准确性和完整性。

  4. 整合到其他工具中(PowerShell等): 在现代的Windows系统中,dir 命令通常作为命令提示符和PowerShell中的一个基本工具。它与其他命令和工具集成在一起,可以与其他命令结合使用,以实现更复杂的文件操作和系统管理任务。

 dir 命令经历了从最初的简单文件列表到现代的功能强大、适应性强的工具的演变过程。它一直是命令行用户界面中的一个重要组成部分,为用户提供了方便快捷地浏览文件系统内容的方式。


dir 命令在命令行界面中有着广泛的应用场景,特别是在Windows和类Unix系统中。以下是一些常见的 dir 命令的应用场景:

  1. 查看目录内容: 最基本的用途是用于列出当前目录下的文件和子目录。通过简单地输入 dir 命令,用户可以查看当前工作目录中的所有文件和文件夹。

  2. 过滤和搜索文件: 使用 dir 命令的不同选项和参数,用户可以根据文件名、文件类型、大小、日期等条件对文件进行过滤和搜索。例如,可以使用 dir *.txt 来列出所有扩展名为 .txt 的文件。

  3. 显示详细信息: 通过添加 /A 参数或 /Q 参数,可以显示文件的详细信息,包括文件大小、创建日期、最后修改日期等。

  4. 列出子目录: 使用 /S 参数,可以递归地列出当前目录及其所有子目录中的文件和文件夹。

  5. 按不同方式排序: dir 命令允许用户根据不同的属性对文件进行排序,例如按文件名、文件大小、创建日期等排序。

  6. 显示隐藏文件和系统文件: 通过添加 /A 参数,可以显示隐藏文件和系统文件,这些文件在默认情况下是不可见的。

  7. 导出文件列表: 可以将 dir 命令的输出结果导出到文件中,以便后续处理或分析。例如,可以使用 dir > filelist.txt 将目录内容保存到名为 filelist.txt 的文件中。

  8. 检查磁盘空间: 使用 dir 命令可以查看磁盘上文件和文件夹的大小,从而了解磁盘空间的使用情况。

 dir 命令是一个非常实用的工具,可以帮助用户快速了解和管理文件系统中的内容。它在命令行环境下广泛应用于文件管理、系统管理和脚本编写等方面。


除了基本的用途外,dir 命令还可以在一些高级应用场景中发挥作用。以下是一些 dir 命令的高级应用场景:

  1. 筛选特定类型的文件并进行批量操作: 可以结合使用 dir 命令和其他命令(如 for 循环)来批量处理特定类型的文件。例如,可以使用 for 循环遍历某个目录下的所有图片文件,并对它们进行压缩或重命名操作。

  2. 生成文件目录清单: 使用 dir 命令的输出结果,可以生成文件目录清单,方便文档管理、备份等工作。这在需要记录文件列表并与他人分享时非常有用。

  3. 监控文件系统变化: 结合 dir 命令和 watch 命令(在类Unix系统中可用),可以实时监控文件系统的变化。这对于跟踪日志文件的更新、监视文件夹中的新文件等场景非常有用。

  4. 定时清理过期文件: 使用 dir 命令结合脚本编写技巧,可以定期清理文件系统中的过期文件。通过比较文件的创建日期或最后访问日期,可以识别并删除不再需要的文件。

  5. 文件系统差异比较: 可以使用 dir 命令生成两个目录的文件列表,然后使用文本比较工具(如 diff)比较这些列表,以查找两个目录之间的差异。这对于文件备份、同步和版本控制非常有用。

  6. 文件系统调试和故障排除: 在诊断文件系统问题时,dir 命令可以用于快速查找特定类型的文件、检查文件属性和权限等。这有助于定位文件系统中的错误或异常情况。

  7. 定制化输出格式: 结合命令行工具(如 awk、sed)或脚本语言(如Python、PowerShell),可以对 dir 命令的输出结果进行进一步处理和定制化,以满足特定需求。

这些高级应用场景展示了 dir 命令的灵活性和多功能性,使其成为命令行环境中不可或缺的工具之一。

dir /?
Displays a list of files and subdirectories in a directory.

DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
  [/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]

  [drive:][path][filename]
              Specifies drive, directory, and/or files to list.

  /A          Displays files with specified attributes.
  attributes   D  Directories                R  Read-only files
               H  Hidden files               A  Files ready for archiving
               S  System files               I  Not content indexed files
               L  Reparse Points             O  Offline files
               -  Prefix meaning not
  /B          Uses bare format (no heading information or summary).
  /C          Display the thousand separator in file sizes.  This is the
              default.  Use /-C to disable display of separator.
  /D          Same as wide but files are list sorted by column.
  /L          Uses lowercase.
  /N          New long list format where filenames are on the far right.
  /O          List by files in sorted order.
  sortorder    N  By name (alphabetic)       S  By size (smallest first)
               E  By extension (alphabetic)  D  By date/time (oldest first)
               G  Group directories first    -  Prefix to reverse order
  /P          Pauses after each screenful of information.
  /Q          Display the owner of the file.
  /R          Display alternate data streams of the file.
  /S          Displays files in specified directory and all subdirectories.
  /T          Controls which time field displayed or used for sorting
  timefield   C  Creation
              A  Last Access
              W  Last Written
  /W          Uses wide list format.
  /X          This displays the short names generated for non-8dot3 file
              names.  The format is that of /N with the short name inserted
              before the long name. If no short name is present, blanks are
              displayed in its place.
  /4          Displays four-digit years

Switches may be preset in the DIRCMD environment variable.  Override
preset switches by prefixing any switch with - (hyphen)--for example, /-W.

dir /?

显示目录中的文件和子目录列表。

DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]

[/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]

[drive:][path][filename] 指定要列出的驱动器、目录和/或文件。

/A 显示具有指定属性的文件。

attributes D 目录 R 只读文件

H 隐藏文件 A 可存档的文件

S 系统文件 I 未索引的文件

L 重解析点 O 脱机文件

- 前缀表示非

/B 使用简洁格式(无标题信息或摘要)。

/C 在文件大小中显示千位分隔符。这是默认设置。使用 /-C 以禁用分隔符的显示。

/D 与 wide 相同,但文件按列排序。

/L 使用小写字母。

/N 新的长列表格式,其中文件名位于最右边。

/O 按文件的排序顺序列出。

sortorder N 按名称(字母顺序)排序 S 按大小(从小到大)排序

E 按扩展名(字母顺序)排序 D 按日期/时间(从旧到新)排序

G 首先按目录组合 - 前缀以反向顺序排序

/P 在每屏信息后暂停。

/Q 显示文件的所有者。

/R 显示文件的备用数据流。

/S 显示指定目录及其所有子目录中的文件。

/T 控制显示或用于排序的时间字段

timefield C 创建时间

          A 上次访问时间

           W 上次写入时间

/W 使用宽列表格式。

/X 这显示为非8.3文件名生成的短名称。格式与 /N 相同,短名称插入在长名称之前。如果没有短名称,则在其位置显示空格。

/4 显示四位数年份

开关可以预设在 DIRCMD 环境变量中。通过用 - (连字符)作为前缀覆盖预设开关,例如,/-W。

展示 dir 命令如何与其他命令结合使用,涵盖初级、中级和高级应用场景。

初级应用:

例子 1:查找指定文件

bashCopy Code
dir /s /b "C:\Users\Username\Documents\*.txt"

这个命令将在指定目录及其子目录中查找所有扩展名为 .txt 的文件。

中级应用:

例子 2:统计文件数量

bashCopy Code
dir /b /a-d "C:\Users\Username\Documents\" | find /c /v ""

这个命令将统计指定目录下的文件数量,排除文件夹。

高级应用:

例子 3:将文件列表导出到文本文件

bashCopy Code
dir /b "C:\Users\Username\Documents\" > filelist.txt

这个命令将指定目录下的文件列表导出到名为 filelist.txt 的文本文件中。

例子 4:监控文件系统变化

bashCopy Code
watch -n 10 "dir /s /b /od C:\Logs\*.log"

这个命令将每隔10秒监控指定目录及其子目录中最新修改的日志文件。

watch 是一个用于周期性执行命令并显示结果的命令行工具,通常用于监视命令输出的变化。它在大多数 Linux 和 Unix 系统中都是预安装的,但在 Windows 中需要额外安装。

在给定的时间间隔内,watch 命令会执行指定的命令,并将其输出显示在终端上。这使得用户可以实时监视命令输出的变化,非常适用于需要定期检查某些信息或执行某些操作的情况。

在你提供的例子中,watch -n 10 "dir /s /b /od C:\Logs\*.log" 的含义是:

  • watch: 启动 watch 命令。
  • -n 10: 指定了刷新间隔,这里是每隔 10 秒执行一次命令。
  • "dir /s /b /od C:\Logs\*.log": 指定要执行的命令,这里是列出指定目录(C:\Logs)下所有 .log 文件的路径,并按照文件的修改日期(最旧的排在前面)进行排序。

这样,每隔 10 秒,watch 就会执行一次 dir /s /b /od C:\Logs\*.log 命令,并将结果显示在终端上,以供实时监视。

需要注意的是,在 Windows 中,watch 命令通常不是默认安装的,你可能需要从第三方或其他源获取并手动安装。

例子 5:定时清理过期文件

bashCopy Code
forfiles /p "C:\Backup\" /s /m *.* /d -30 /c "cmd /c del @path"

这个命令将删除指定目录及其子目录中30天前的所有文件。

这些例子展示了 dir 命令与其他命令结合使用的不同场景,从简单的文件查找到定期清理文件的高级应用。

forfiles系统自带命令


在 Windows 命令行中,使用 dir 命令显示完整路径的几种常用方法:

方法一:dir /s /b (最常用)

cmd
dir /s /b
  • /s:递归显示所有子目录中的文件
  • /b:精简模式,只显示文件 / 目录的完整路径,不显示其他信息
只显示文件(不显示目录):
cmd
dir /a-d /s /b
只显示目录:
cmd
dir /ad /s /b

方法二:指定具体目录

cmd
dir "C:\目标文件夹" /s /b

方法三:输出到文件

cmd
dir /s /b > 文件列表.txt

方法四:使用 for 命令(当前目录非递归)

cmd
for %f in (*) do @echo %~ff

示例效果:
plaintext
C:\Users\Documents\file1.txt
C:\Users\Documents\file2.txt
C:\Users\Documents\subfolder\file3.txt

Windows dir 命令不常被用到的高效特殊参数组合,全部基于CMD环境实测可用,覆盖定位文件、排查问题、批量处理等场景:

一、高效筛选定位类

1. 全盘超大文件快速定位

cmd
dir C:\ /s /o-s /a-d /b | findstr /r "\.(mp4|zip|iso|exe|msi)$"
  • 参数含义: /s 递归遍历所有子目录,/o-s 按文件大小降序排列(最大的在最前),/a-d 只显示文件、排除文件夹,/b 只输出文件完整路径、无冗余信息 后面的findstr用正则过滤指定后缀的文件
  • 效果:几秒就能定位全盘最大的视频/压缩包/镜像/安装包,比资源管理器搜索快数倍,是排查磁盘空间占用的神器
  • 变体:把/o-s改成/os就是按文件大小升序,找最小文件用

2. 按时间维度筛选最新文件

cmd
dir "D:\工作文档" /s /o-d /t:w /a-d /b > 最近写入的文档列表.txt
  • 参数含义:/t:w 指定按「文件写入时间」排序,/o-d 按时间降序(最新的在最前),如果要按创建时间筛选就改成/t:c,按访问时间改成/t:a
  • 效果:直接导出指定目录下最近更新的所有文件路径,适合版本回溯、归档整理,导出的txt可以直接导入批量处理工具

3. 扩展名归类整理

cmd
dir "D:\杂项下载" /s /o:e /a-d /b
  • 参数含义:/o:e 按文件扩展名字母顺序排序
  • 效果:所有文件按后缀从A到Z排列,一眼就能看出这个目录里有哪些类型的文件,适合整理杂项文件夹

二、特殊属性/信息查看类

1. 隐藏/系统文件快速排查

cmd
dir C:\Windows /s /a:hs /b
  • 参数含义:/a 后可以组合多个属性字母:h=隐藏文件、s=系统文件、d=文件夹、r=只读文件,/a:hs就是同时筛选「隐藏+系统」属性的文件
  • 效果:不用手动开启显示隐藏文件,直接拉取系统目录下所有异常隐藏的系统文件,排查病毒、恶意文件时效率极高
  • 变体:找只读文件用/a:r,找所有隐藏文件用/a:h

2. 文件权限/所有者快速筛查

cmd
dir "D:\共享部门文件夹" /s /q | findstr "BUILTIN\\Users"
  • 参数含义:/q 是dir的隐藏参数,专门显示文件的NTFS所有者、权限信息,后面接findstr筛选指定用户/组的权限
  • 效果:不用挨个右键查看文件属性,几秒就能定位某个文件夹下所有对「Users组」开放权限的文件,排查共享越权、权限配置问题超高效

3. 长短文件名对照输出

cmd
dir "C:\Program Files (x86)" /x /b
  • 参数含义:/x 参数会同时输出文件的长文件名和8.3格式短文件名(DOS时代的短格式,最多8位文件名+3位后缀,比如Program Files (x86)的短文件名一般是PROGRA~2)
  • 效果:解决老程序、脚本无法识别带空格/特殊字符的长文件名的问题,直接用短文件名访问就不会报路径错误

三、实用批量处理类

1. 纯文件夹列表导出

cmd
dir "E:\影视资源" /s /a:d /o-d /b > 所有影视文件夹列表.txt
  • 参数含义:/a:d 只显示文件夹、排除文件,/o-d 按文件夹最后修改时间降序
  • 效果:列出所有子文件夹,最新的在最前面,适合快速找最近更新的项目、影视剧文件夹,不用在资源管理器里一层层翻

2. 目录总容量/文件数统计

cmd
dir "D:\游戏库" /s | findstr /r "File(s)|Dir(s)"
  • 效果:dir递归统计完会自动输出总文件数、总目录数、总占用空间,用findstr过滤这两行信息,就能直接拿到目录的总容量,适合写脚本做磁盘空间统计

3. 全目录同名文件排查

cmd
dir /s /b | findstr /r "\\[^\\]*\.[^\\]*\1$"
  • 效果:用正则匹配所有重名文件,不管是不同目录的同名文件、还是同目录的同名文件都会列出来,适合清理重复文件

4. 总文件数快速统计

cmd
dir "D:\项目源码" /s /a-d | find /c "/"
  • 效果:直接输出指定目录下所有子目录的总文件数,适合统计代码量、文件数量,不用写遍历脚本

注意事项

  1. 递归大目录(比如C盘根目录)耗时较长,建议指定具体子目录运行
  2. 路径带空格一定要加英文双引号,否则会识别失败
  3. findstr做正则匹配必须加/r参数,否则默认是字面匹配,可能搜不到目标内容
  4. 查看系统关键目录(比如C:\Windows、C:\System32)需要以管理员身份运行CMD,否则会提示拒绝访问
  5. 以上组合均基于传统CMD环境,PowerShell中dir是Get-ChildItem的别名,部分参数(比如排序规则、短文件名显示)可能不兼容,建议在CMD中运行。

Windows CMD 中 dir 命令的更多“另类、特殊、组合”示例。
每个示例都附带简要说明、常见用途以及可直接粘贴执行的完整命令(路径请自行替换为你的实际目标文件夹)。

提示:所有示例均在普通 CMD 窗口中运行;若涉及系统目录或需要查看受保护文件,请以 管理员身份 打开 CMD。


一、批量生成可直接使用的列表(CSV/TSV/JSON 等)

场景 命令 说明
导出文件名 + 大小 + 修改时间(CSV) cmd for /f "tokens=*" %A in ('dir "D:\Data" /s /a-d /-c') do @echo "%~fA","%~zA","%~tA" > files.csv / -c 去掉千位分隔符,使大小成为纯数字;for /f 逐行读取 dir 输出,利用 %~fA(完整路径)、%~zA(字节大小)、%~tA(修改时间)生成 CSV。
仅保留文件名(无路径)并去重(TSV) ```cmddir "E:\Docs" /s /b /a-d sort
生成 JSON 数组(文件路径+大小) cmd (echo [ & for /f "usebackq delims=" %A in (`dir "F:\Logs" /s /b /a-d`) do (echo { "path":"%~fA","size":%~zA }^& if not "%~fA"=="%%~fA" echo ,) & echo ])> logs.json  利用 for /f 循环拼接 JSON 对象,末尾自动加逗号除最后一个;得到可直接喂给 jq、Python json.load 等工具的标准数组。

小技巧:如果你只想要 不带引号 的纯路径列表(便于 for 循环直接使用),把上面的 @echo "%~fA" 改为 @echo %~fA 并去掉外层双引号。


二、利用 dir 的隐式排序与过滤实现“目录树快照”

场景 命令 说明
按目录深度递增输出(类似 tree,但纯文本) ```cmddir "C:\Project" /s /b /a:d awk -F"\" '{printf "%*s%s\n", length($0)-length($NF)*2, "", $NF}'```
只显示第 N 层子目录(比如只看二级文件夹) cmd for /d %%A in ("D:\Root\*") do for /d %%B in ("%%A\*") do echo %%B  外层 for /d 遍历一级子目录,内层再遍历其二级子目录并直接输出路径。可通过增加嵌套层数得到任意深度。
生成“目录 → 文件数”映射表 ```cmdfor /d %%A in ("G:\Media*") do @echo %%~nA:^& dir "%%A" /a-d /b find /c /v ""```

三、针对 NTFS 特色属性的高级过滤

场景 命令 说明
查看具有「压缩」属性的文件(NTFS 压缩) cmd dir "H:\Backup" /s /a:c /b /a:c 表示 compressed(已压缩)文件。配合 /s 可递归找出所有被 NTFS 压缩的文件,定位误开启压缩导致性能下降的目录。
查看具有「加密」属性的文件(EFS) cmd dir "I:\Secure" /s /a:e /b  /a:e 表示 encrypted(已加密)文件。常用于审计敏感数据是否被意外加密。
查看具有「稀疏」属性的文件(大文件但实际占用少) cmd dir "J:\VMs" /s /a:s /b  /a:s 表示 sparse(稀疏)文件。适用于检查虚拟机磁盘、数据库文件是否真的稀疏,以决定是否需要重新分配空间。
同时满足多个属性(如 隐藏+系统+只读) cmd dir "K:\System" /s /a:hsr /b  属性字母可组合:h 隐藏、s 系统、r 只读。上例返回所有同时具备这三种属性的文件/文件夹。

注意:属性过滤只能在 NTFS 分区上生效;FAT32/exFAT 不支持这些属性。


四、配合 findstr/find 实现内容级过滤(虽然 dir 本身不看文件内容,但可先过滤出候选文件再用其他工具)

场景 命令 说明
先按扩展名过滤 .log/.txt,再用 findstr 检索关键字 ```cmddir "L:\Logs" /s /b /a-d *.log *.txt findstr /i /m "error|fail|exception" > problematic.log```
找出最近 7 天内被修改且包含特定字符串的批处理文件 ```cmdfor /f "delims=" %A in ('dir "M:\Scripts" /s /b /a-d /t:w *.bat *.cmd ^ forfiles /p . /m * /d -7 /c "cmd /c echo @path"') do @if exist "%A" (findstr /i "deploy" "%A" && echo %A)```
导出所有包含中文注释的 .py 文件路径 ```cmddir "N:\Code" /s /b /a-d *.py findstr /r "[\u4e00-\u9fff]" > py_with_chinese.txt```

技巧:如果你经常需要“基于文件名+内容”双重过滤,建议把第一步的 dir … /b 输出保存到临时文件,再用 for /f 循环读取该文件进行第二步检索,这样可以避免重复遍历磁盘。


五、利用 dir 的 /n、/l、/c、/-c 等格式化开关生成对齐报表

场景 命令 说明
生成等宽对齐的文件清单(类似 ls -l) cmd dir "O:\Reports" /s /n /-c /n 采用长格式(类似 ls -l),/-c 去掉千位分隔符,使大小列纯数字,便于用 awk、cut 等做列提取。
强制小写输出路径(便于不区分大小写的后续比对) ```cmddir "P:\Data" /s /b /l sort > lower_list.txt```
只显示文件名和大小(去掉日期时间列) ```cmddir "Q:\Archive" /s /a-d /b /-c for /f "tokens=1,*" %A in ('more') do @echo %A %~zA```

六、快速定位“异常大小”或“异常时间”的文件(用于安全审计或故障排查)

场景 命令 说明
找出大小为 0 字节的文件(可能是损坏或占位) ```cmddir "R:\Import" /s /a-d /b for /f %A in ('more') do if %~zA==0 echo %A```
找出修改时间早于某个日期的文件(比如半年前) cmd forfiles /p "S:\Archives" /s /m * /d -180 /c "cmd /c echo @path"  虽然不是 dir 本身,但常与 dir 配合:先用 dir /t:w 按时间排序,再用 forfiles 过滤。如果坚持只用 dir,可这样:`dir "S:\Archives" /s /a-d /t:w /b
找出最近 10 分钟内被创建的可执行文件(常见病毒特征) cmd forfiles /p "T:\Temp" /s /m *.exe *.dll /c "cmd /c if @isdir==FALSE echo @path" & for /f %A in ('more') do if "%~tA" GTR "%time:~-5%" echo %A  此例展示了如何把时间戳与当前时间做简单比较(适合批处理快速检测),实际生产环境建议用 PowerShell 的 `Get-ChildItem

七、使用 dir 生成可直接交给其他程序的输入(如 icacls, robocopy, xcopy)

场景 命令 说明
批量为特定扩展名文件添加只读属性 cmd for /f %A in ('dir "U:\Docs" /s /b /a-d *.docx *.pdf') do attrib +r "%A"  dir … /b 生成文件路径列表,for /f 逐个传给 attrib。
生成 robocopy 的源文件列表(只复制文件,不创建空目录) cmd  dir "V:\Source" /s /b /a-d > filelist.txt<br>robocopy "V:\Source" "W:\Dest" /file:%filelist.txt 先把所有需要复制的文件写入文件列表,再用 robocopy /file: 按该列表执行复制,可精确控制哪些文件被同步。
为所有批处理文件添加执行权限(在 WSL 中需要) cmd for /f %A in ('dir "X:\WSLScripts" /s /b /a-d *.sh') do wsl chmod +x "%A"  演示了如何把 Windows 路径传给 WSL 执行 Linux 命令。

八、常见坑与调试技巧

问题 产生原因 解决方案
输出里出现重复的 “.” 和 “..” 没有使用 /a-d(只显示文件)或忘记过滤目录 加上 /a-d(仅文件)或 /a:-d(排除目录)
中文路径显示为乱码 CMD 默认使用当前系统代码页(如 936)与实际编码不匹配 在 CMD 开头执行 chcp 65001 切换到 UTF-8,或使用 powershell -Command "[Console]::OutputEncoding = [UTF8]Encoding::UTF8"
递归太慢导致卡死 遍历了极大的目录(如整个 C:\)且同时管道到复杂的 findstr 先限制范围(指定子目录),或先将 dir … /b 输出到文件再分阶段处理
属性过滤不起作用 分区不是 NTFS(如 U 盘为 FAT32) 检查目标分区格式,仅 NTFS 支持 /a:hxsr 等属性过滤
变量在 for 循环里没被更新 没有启用 delayed expansion 在需要的地方加入 setlocal enabledelayedexpansion 并使用 !var! 而非 %var%

小结

  • dir 本身只是一个 文件/目录枚举器,但只要善用它的排序 (/o)、属性 (/a)、格式 (/n /l /c /-c)、基本输出 (/b /s) 以及与 管道、for /f、findstr、forfiles、attrib、robocopy 等外部工具的组合,就能完成从快速定位大文件、属性审计、批量属性修改、到生成可直接喂给其他程序的清单等几乎所有日常运维、开发和安全场景的需求。
  • 只要记住:先用 dir 把海量信息变成纯文本流,再用文本处理工具(findstr, find, sort, uniq, awk, for /f 等)做二次过滤和格式化——这就是 dir “另类、特殊、组合” 的核心思路。

 

posted @ 2024-03-30 21:36  suv789  阅读(1495)  评论(0)    收藏  举报