核心概念:管道符
在讲解具体命令前,必须理解 (管道符)的作用。

管道符 :它像一个管道,将左边命令的“标准输出”传递给右边命令的“标准输入”。
语法:
command_A | command_B
工作流程:
- 执行
command_A。 command_A的正常输出结果(不是错误信息)不会显示在屏幕上。- 这些输出结果被直接“注入”到
command_B中,作为command_B的输入数据。 command_B对这些数据进行处理,然后将自己的输出结果显示在屏幕上。
示例: 查看当前目录下的文件和文件夹,并只显示那些包含 "txt" 的行。

dir | find "txt"
主要过滤命令详解
find - 查找包含指定字符串的行
find 是最基本的文本查找工具,它从输入中搜索包含指定文本字符串的行。
语法:
find [/v] [/c] [/n] [/i] "string"
常用参数:
"string":要查找的字符串(必须用引号括起来)。/i:忽略大小写进行查找,这是非常常用的参数。/v:显示不包含指定字符串的所有行。/c:只显示匹配行的计数(总共有多少行匹配)。/n:在输出的每行开头显示行号。
示例:

示例 1:在文件中查找
查找 config.sys 文件中包含 "device" 的行。
find "device" config.sys
示例 2:结合 dir 使用
查找当前目录下所有文件名中包含 "log" 的文件。
dir | find "log"
示例 3:忽略大小写 查找文件中包含 "Windows" 或 "windows" 的行。
find /i "windows" my_document.txt
示例 4:统计数量
统计 report.txt 文件中包含 "error" 的行数。
find /c "error" report.txt
findstr - 更强大的查找工具
findstr 是 find 的增强版,功能更强大,支持正则表达式,是 DOS 下进行复杂文本搜索的首选。
语法:
findstr [/options] "string" [pathname(s)]
常用参数:
/i:忽略大小写。/r:使用正则表达式。/s:在当前目录及所有子目录中搜索。/n:显示行号。/c:"text":使用指定的文本作为文字字符串(如果字符串中包含空格,必须用/c:前缀)。/x:只显示完全匹配的行。/v:显示不包含匹配项的行。/m:如果文件包含匹配项,只输出文件名。
正则表达式元字符:
- :任意单个字符
- :零次或多次重复前一个字符
^:行的开始- :行的结束
[class]:字符类,[a-z]任意小写字母[^class]:非字符类,[^0-9]任意非数字字符[x-y]:范围,[A-Z]任意大写字母\x:转义元字符x,\.匹配点号本身
示例:
示例 1:查找多个关键词 查找文件中包含 "error" 或 "warning" 的行。
findstr /i "error warning" logfile.txt
示例 2:在所有子目录中搜索
在当前目录及其所有子目录的所有 .ini 文件中搜索 "timeout"。
findstr /s /i "timeout" *.ini
示例 3:使用正则表达式 查找所有以 "192.168." 开头的 IP 地址。
findstr /r "^192\." ip_list.txt
^表示行首。\.用来转义 ,使其匹配真正的点号而不是任意字符。
示例 4:查找不包含 "TODO" 的行
findstr /v /i "TODO" source_code.c
sort - 对行进行排序
sort 命令对输入的文本行按字母顺序进行排序。
语法:
sort [/r] [+n] [/m kilobytes] [/l locale] [/rec_characters]
常用参数:
/r:反向排序(从 Z 到 A)。+n:从第n列开始排序(列从 0 开始计数)。+1表示从第二个字符开始排序。/o filename:将排序结果输出到指定文件,而不是屏幕。
示例:
示例 1:基本排序
将 names.txt 文件中的名字按字母顺序排序并显示。
sort names.txt
示例 2:反向排序按逆序排列。
sort /r names.txt
示例 3:结合 dir 使用
将当前目录下的文件列表按扩展名排序。
dir | sort
默认情况下,sort 会按整行排序,如果只想按扩展名排序,需要更复杂的技巧,比如结合 for 循环和批处理。
more - 分页显示输出
很多,一屏显示不完时,more 命令可以将其分页显示,每次显示一屏,按任意键继续。
语法:
more [< pathname]
示例:
示例 1:分页查看长文件
more 会先显示一屏内容,然后在屏幕底部显示 -- More --,按任意键继续查看下一屏。
more long_document.txt
示例 2:结合其他命令使用
将 dir 命令的输出通过管道传给 more,实现分页查看文件列表。
dir | more
find 与 >, >> - 输出重定向
虽然 是管道,但 > 和 >> 也是过滤和保存结果的重要工具。
>:输出重定向,将命令的输出写入一个文件,如果文件已存在则覆盖。>>:追加输出,将命令的输出追加到一个文件的末尾,如果文件不存在则创建。
示例:
示例 1:查找并保存结果
将所有包含 "error" 的行从 logfile.txt 中查找出来,并保存到 errors.log 文件中。
find /i "error" logfile.txt > errors.log
示例 2:追加日志
将新的错误信息追加到已有的 errors.log 文件中。
find /i "critical" new_log.txt >> errors.log
综合应用示例
这些命令的真正威力在于它们可以组合使用。
场景: 你有一个名为 server.log 的大日志文件,需要找到今天所有 "ERROR" 级别的日志,按时间排序(假设时间在行首),并保存到 error_report.txt 中。
假设日志格式如下:
2025-10-27 10:00:01 INFO Server started.
2025-10-27 10:05:23 ERROR Database connection failed.
2025-10-27 10:10:45 INFO User logged in.
2025-10-27 10:15:10 WARNING Disk space low.
2025-10-27 10:20:55 ERROR Authentication failed for user admin.
解决步骤:
-
查找所有 "ERROR" 行:
find /i "error" server.log
这会输出所有包含 "error" 的行。
-
将结果进行排序: 我们想按时间排序,时间在每行的开头,所以直接排序即可。
find /i "error" server.log | sort
sort会默认按行首的日期时间字符串进行排序。 -
将最终结果保存到文件: 使用
>将排序后的结果保存到新文件。find /i "error" server.log | sort > error_report.txt
最终的一行命令:
find /i "error" server.log | sort > error_report.txt
| 命令 | 主要功能 | 常用参数 | 示例 |
|---|---|---|---|
find |
查找包含字符串的行 | /i (忽略大小写), /c (计数), /v (反选) |
dir \| find "exe" |
findstr |
更强大的查找,支持正则 | /i, /r (正则), /s (子目录) |
findstr /r "^[0-9]" data.txt |
sort |
对文本行进行排序 | /r (反向), +n (从第n列排) |
dir \| sort |
more |
分页显示长内容 | 无 | type longfile.txt \| more |
> |
输出重定向(覆盖) | 无 | dir > filelist.txt |
>> |
输出重定向(追加) | 无 | echo log >> app.log |
掌握这些过滤命令是精通 DOS 批处理脚本的关键,通过将它们像乐高积木一样组合起来,你可以完成非常复杂的文本处理任务。
