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

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-覆盖。
备注:
/A选项非常灵活,允许你显示具有特定属性的文件,属性可以组合使用。例如/A:R可以列出只读文件,/A:D列出目录。/O选项提供了按多种方式排序文件的能力(如按名称、大小、日期等),并且可以通过-前缀来反向排序。/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 命令的一些主要发展阶段:
-
初期阶段(早期的DOS): 最初的
dir命令是在早期的DOS系统中引入的,它用于列出当前目录中的文件和子目录。这个命令非常基础,只能显示文件名和文件夹名,以及一些基本的属性信息,如文件大小和创建日期。 -
增强功能(后来的DOS和Windows): 随着操作系统的发展,
dir命令逐渐增加了更多的功能和选项。用户可以通过不同的参数来控制输出的格式,例如,列出隐藏文件、显示详细属性、按不同的排序方式等。 -
适应新技术(现代Windows): 随着Windows操作系统的发展,
dir命令也适应了新的技术和文件系统。例如,在支持长文件名和Unicode字符的系统上,dir命令可以正确地处理这些文件名,确保输出信息的准确性和完整性。 -
整合到其他工具中(PowerShell等): 在现代的Windows系统中,
dir命令通常作为命令提示符和PowerShell中的一个基本工具。它与其他命令和工具集成在一起,可以与其他命令结合使用,以实现更复杂的文件操作和系统管理任务。
dir 命令经历了从最初的简单文件列表到现代的功能强大、适应性强的工具的演变过程。它一直是命令行用户界面中的一个重要组成部分,为用户提供了方便快捷地浏览文件系统内容的方式。
dir 命令在命令行界面中有着广泛的应用场景,特别是在Windows和类Unix系统中。以下是一些常见的 dir 命令的应用场景:
-
查看目录内容: 最基本的用途是用于列出当前目录下的文件和子目录。通过简单地输入
dir命令,用户可以查看当前工作目录中的所有文件和文件夹。 -
过滤和搜索文件: 使用
dir命令的不同选项和参数,用户可以根据文件名、文件类型、大小、日期等条件对文件进行过滤和搜索。例如,可以使用dir *.txt来列出所有扩展名为.txt的文件。 -
显示详细信息: 通过添加
/A参数或/Q参数,可以显示文件的详细信息,包括文件大小、创建日期、最后修改日期等。 -
列出子目录: 使用
/S参数,可以递归地列出当前目录及其所有子目录中的文件和文件夹。 -
按不同方式排序:
dir命令允许用户根据不同的属性对文件进行排序,例如按文件名、文件大小、创建日期等排序。 -
显示隐藏文件和系统文件: 通过添加
/A参数,可以显示隐藏文件和系统文件,这些文件在默认情况下是不可见的。 -
导出文件列表: 可以将
dir命令的输出结果导出到文件中,以便后续处理或分析。例如,可以使用dir > filelist.txt将目录内容保存到名为filelist.txt的文件中。 -
检查磁盘空间: 使用
dir命令可以查看磁盘上文件和文件夹的大小,从而了解磁盘空间的使用情况。
dir 命令是一个非常实用的工具,可以帮助用户快速了解和管理文件系统中的内容。它在命令行环境下广泛应用于文件管理、系统管理和脚本编写等方面。
除了基本的用途外,dir 命令还可以在一些高级应用场景中发挥作用。以下是一些 dir 命令的高级应用场景:
-
筛选特定类型的文件并进行批量操作: 可以结合使用
dir命令和其他命令(如for循环)来批量处理特定类型的文件。例如,可以使用for循环遍历某个目录下的所有图片文件,并对它们进行压缩或重命名操作。 -
生成文件目录清单: 使用
dir命令的输出结果,可以生成文件目录清单,方便文档管理、备份等工作。这在需要记录文件列表并与他人分享时非常有用。 -
监控文件系统变化: 结合
dir命令和watch命令(在类Unix系统中可用),可以实时监控文件系统的变化。这对于跟踪日志文件的更新、监视文件夹中的新文件等场景非常有用。 -
定时清理过期文件: 使用
dir命令结合脚本编写技巧,可以定期清理文件系统中的过期文件。通过比较文件的创建日期或最后访问日期,可以识别并删除不再需要的文件。 -
文件系统差异比较: 可以使用
dir命令生成两个目录的文件列表,然后使用文本比较工具(如diff)比较这些列表,以查找两个目录之间的差异。这对于文件备份、同步和版本控制非常有用。 -
文件系统调试和故障排除: 在诊断文件系统问题时,
dir命令可以用于快速查找特定类型的文件、检查文件属性和权限等。这有助于定位文件系统中的错误或异常情况。 -
定制化输出格式: 结合命令行工具(如
awk、sed)或脚本语言(如Python、PowerShell),可以对dir命令的输出结果进行进一步处理和定制化,以满足特定需求。
这些高级应用场景展示了 dir 命令的灵活性和多功能性,使其成为命令行环境中不可或缺的工具之一。
|
dir /? DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N] [drive:][path][filename] /A Displays files with specified attributes. Switches may be preset in the DIRCMD environment variable. Override |
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:查找指定文件
dir /s /b "C:\Users\Username\Documents\*.txt"
这个命令将在指定目录及其子目录中查找所有扩展名为 .txt 的文件。
中级应用:
例子 2:统计文件数量
dir /b /a-d "C:\Users\Username\Documents\" | find /c /v ""
这个命令将统计指定目录下的文件数量,排除文件夹。
高级应用:
例子 3:将文件列表导出到文本文件
dir /b "C:\Users\Username\Documents\" > filelist.txt
这个命令将指定目录下的文件列表导出到名为 filelist.txt 的文本文件中。
例子 4:监控文件系统变化
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:定时清理过期文件
forfiles /p "C:\Backup\" /s /m *.* /d -30 /c "cmd /c del @path"
这个命令将删除指定目录及其子目录中30天前的所有文件。
这些例子展示了 dir 命令与其他命令结合使用的不同场景,从简单的文件查找到定期清理文件的高级应用。
dir 命令显示完整路径的几种常用方法:方法一:dir /s /b (最常用)
dir /s /b
/s:递归显示所有子目录中的文件/b:精简模式,只显示文件 / 目录的完整路径,不显示其他信息
dir /a-d /s /b
dir /ad /s /b
方法二:指定具体目录
dir "C:\目标文件夹" /s /b
方法三:输出到文件
dir /s /b > 文件列表.txt
方法四:使用 for 命令(当前目录非递归)
for %f in (*) do @echo %~ff
C:\Users\Documents\file1.txt
C:\Users\Documents\file2.txt
C:\Users\Documents\subfolder\file3.txt
Windows dir 命令不常被用到的高效特殊参数组合,全部基于CMD环境实测可用,覆盖定位文件、排查问题、批量处理等场景:
一、高效筛选定位类
1. 全盘超大文件快速定位
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. 按时间维度筛选最新文件
dir "D:\工作文档" /s /o-d /t:w /a-d /b > 最近写入的文档列表.txt
- 参数含义:
/t:w指定按「文件写入时间」排序,/o-d按时间降序(最新的在最前),如果要按创建时间筛选就改成/t:c,按访问时间改成/t:a - 效果:直接导出指定目录下最近更新的所有文件路径,适合版本回溯、归档整理,导出的txt可以直接导入批量处理工具
3. 扩展名归类整理
dir "D:\杂项下载" /s /o:e /a-d /b
- 参数含义:
/o:e按文件扩展名字母顺序排序 - 效果:所有文件按后缀从A到Z排列,一眼就能看出这个目录里有哪些类型的文件,适合整理杂项文件夹
二、特殊属性/信息查看类
1. 隐藏/系统文件快速排查
dir C:\Windows /s /a:hs /b
- 参数含义:
/a后可以组合多个属性字母:h=隐藏文件、s=系统文件、d=文件夹、r=只读文件,/a:hs就是同时筛选「隐藏+系统」属性的文件 - 效果:不用手动开启显示隐藏文件,直接拉取系统目录下所有异常隐藏的系统文件,排查病毒、恶意文件时效率极高
- 变体:找只读文件用
/a:r,找所有隐藏文件用/a:h
2. 文件权限/所有者快速筛查
dir "D:\共享部门文件夹" /s /q | findstr "BUILTIN\\Users"
- 参数含义:
/q是dir的隐藏参数,专门显示文件的NTFS所有者、权限信息,后面接findstr筛选指定用户/组的权限 - 效果:不用挨个右键查看文件属性,几秒就能定位某个文件夹下所有对「Users组」开放权限的文件,排查共享越权、权限配置问题超高效
3. 长短文件名对照输出
dir "C:\Program Files (x86)" /x /b
- 参数含义:
/x参数会同时输出文件的长文件名和8.3格式短文件名(DOS时代的短格式,最多8位文件名+3位后缀,比如Program Files (x86)的短文件名一般是PROGRA~2) - 效果:解决老程序、脚本无法识别带空格/特殊字符的长文件名的问题,直接用短文件名访问就不会报路径错误
三、实用批量处理类
1. 纯文件夹列表导出
dir "E:\影视资源" /s /a:d /o-d /b > 所有影视文件夹列表.txt
- 参数含义:
/a:d只显示文件夹、排除文件,/o-d按文件夹最后修改时间降序 - 效果:列出所有子文件夹,最新的在最前面,适合快速找最近更新的项目、影视剧文件夹,不用在资源管理器里一层层翻
2. 目录总容量/文件数统计
dir "D:\游戏库" /s | findstr /r "File(s)|Dir(s)"
- 效果:dir递归统计完会自动输出总文件数、总目录数、总占用空间,用
findstr过滤这两行信息,就能直接拿到目录的总容量,适合写脚本做磁盘空间统计
3. 全目录同名文件排查
dir /s /b | findstr /r "\\[^\\]*\.[^\\]*\1$"
- 效果:用正则匹配所有重名文件,不管是不同目录的同名文件、还是同目录的同名文件都会列出来,适合清理重复文件
4. 总文件数快速统计
dir "D:\项目源码" /s /a-d | find /c "/"
- 效果:直接输出指定目录下所有子目录的总文件数,适合统计代码量、文件数量,不用写遍历脚本
注意事项
- 递归大目录(比如C盘根目录)耗时较长,建议指定具体子目录运行
- 路径带空格一定要加英文双引号,否则会识别失败
findstr做正则匹配必须加/r参数,否则默认是字面匹配,可能搜不到目标内容- 查看系统关键目录(比如
C:\Windows、C:\System32)需要以管理员身份运行CMD,否则会提示拒绝访问 - 以上组合均基于传统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“另类、特殊、组合” 的核心思路。

浙公网安备 33010602011771号