批处理脚本 - 文件管道



管道运算符(|)接收一个命令的输出(默认情况下为 STDOUT),并将其定向到另一个命令的输入(默认情况下为 STDIN)。例如,以下命令对 C:\ 目录的内容进行排序。

dir C:\ | sort

在这个例子中,两个命令同时启动,但随后 sort 命令暂停,直到它接收 dir 命令的输出。sort 命令使用 dir 命令的输出作为其输入,然后将其输出发送到句柄 1(即 STDOUT)。

以下是管道命令的另一个示例。在这个示例中,文件 C:\new.txt 的内容通过管道过滤器发送到 sort 命令。

@echo off 
TYPE C:\new.txt | sort

结合命令与重定向运算符

通常,管道运算符与重定向运算符一起使用,以便在处理管道命令时提供有用的功能。

例如,以下命令将首先获取 C:\ 中定义的所有文件,然后使用管道命令查找所有扩展名为 .txt 的文件。然后它将获取此输出并将其打印到文件 AllText.txt 中。

dir C:\ | find "txt" > AllText.txt

使用多个管道命令

要在同一个命令中使用多个过滤器,请使用管道符号(|)分隔这些过滤器。例如,以下命令搜索驱动器 C: 上的每个目录,查找包含字符串“Log”的文件名,然后一次在一个命令提示符窗口中显示它们 -

dir c:\ /s /b | find "TXT" | more

以下是一些管道过滤器使用方法的示例。

示例

以下示例使用 tasklist 命令发送所有正在运行的任务列表,并将输出发送到 find 命令。然后,find 命令将查找所有类型为记事本的进程并在命令提示符中显示它们。

tasklist | find "notepad"

输出

以下是一个示例输出。

notepad.exe               1400 Console            1      8,916 K
notepad.exe               4016 Console            1      11,200 K
notepad.exe               1508 Console            1      8,720 K
notepad.exe               4076 Console            1      8,688 K

以下示例使用 tasklist 命令发送所有正在运行的任务列表,并将输出发送到 more 命令。然后,more 命令将一次显示一页正在运行的任务列表。

示例

tasklist | more

输出

Image Name                PID Session Name  Session#     Mem Usage
======================    ================  ===========  ============
System Idle Process           0 Services        0             4 K
System                        4 Services        0           276 K
smss.exe                    344 Services        0         1,060 K
csrss.exe                   524 Services        0         4,188 K
csrss.exe                   608 Console         1        58,080 K
wininit.exe                 616 Services        0         3,528 K
winlogon.exe                644 Console         1         5,636 K
services.exe                708 Services        0         7,072 K
lsass.exe                   716 Services        0        10,228 K
svchost.exe                 784 Services        0        10,208 K
svchost.exe                 828 Services        0         7,872 K
dwm.exe                     912 Console         1       208,316 K
nvvsvc.exe                  932 Services        0         6,772 K
nvxdsync.exe                968 Console         1        16,584 K
nvvsvc.exe                  976 Console         1        12,780 K
svchost.exe                1008 Services        0        20,340 K
svchost.exe                 224 Services        0        39,740 K
svchost.exe                 468 Services        0        11,864 K
svchost.exe                 860 Services        0        11,184 K
svchost.exe                 232 Services        0        16,992 K
wlanext.exe                1168 Services        0        12,840 K
-- More --

以下示例使用 tasklist 命令发送所有正在运行的任务列表,并将输出发送到 find 命令。然后,find 命令将查找所有类型为记事本的进程,然后使用重定向命令将内容发送到文件 tasklist.txt。

示例

tasklist | find "notepad" > tasklist.txt

输出

如果打开文件 tasklist.txt,您将获得以下示例输出。

notepad.exe            1400 Console            1      8,916 K
notepad.exe            4016 Console            1      11,200 K
notepad.exe            1508 Console            1      8,720 K
notepad.exe            4076 Console            1      8,688 K
batch_script_functions.htm
广告