菜鸟科技网

Dos过滤命令有哪些常用技巧?

核心概念:管道符

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

Dos过滤命令有哪些常用技巧?-图1
(图片来源网络,侵删)

管道符 :它像一个管道,将左边命令的“标准输出”传递给右边命令的“标准输入”。

语法: command_A | command_B

工作流程:

  1. 执行 command_A
  2. command_A 的正常输出结果(不是错误信息)不会显示在屏幕上。
  3. 这些输出结果被直接“注入”到 command_B 中,作为 command_B 的输入数据。
  4. command_B 对这些数据进行处理,然后将自己的输出结果显示在屏幕上。

示例: 查看当前目录下的文件和文件夹,并只显示那些包含 "txt" 的行。

Dos过滤命令有哪些常用技巧?-图2
(图片来源网络,侵删)
dir | find "txt"

主要过滤命令详解

find - 查找包含指定字符串的行

find 是最基本的文本查找工具,它从输入中搜索包含指定文本字符串的行。

语法: find [/v] [/c] [/n] [/i] "string"

常用参数:

  • "string":要查找的字符串(必须用引号括起来)。
  • /i忽略大小写进行查找,这是非常常用的参数。
  • /v:显示不包含指定字符串的所有行。
  • /c:只显示匹配行的计数(总共有多少行匹配)。
  • /n:在输出的每行开头显示行号。

示例:

Dos过滤命令有哪些常用技巧?-图3
(图片来源网络,侵删)

示例 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 - 更强大的查找工具

findstrfind 的增强版,功能更强大,支持正则表达式,是 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.

解决步骤:

  1. 查找所有 "ERROR" 行:

    find /i "error" server.log

    这会输出所有包含 "error" 的行。

  2. 将结果进行排序: 我们想按时间排序,时间在每行的开头,所以直接排序即可。

    find /i "error" server.log | sort

    sort 会默认按行首的日期时间字符串进行排序。

  3. 将最终结果保存到文件: 使用 > 将排序后的结果保存到新文件。

    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 批处理脚本的关键,通过将它们像乐高积木一样组合起来,你可以完成非常复杂的文本处理任务。

分享:
扫描分享到社交APP
上一篇
下一篇