Command line Windows CMD:如何将正在运行的程序输出通过管道传输到FINDSTR并写入文件

Command line Windows CMD:如何将正在运行的程序输出通过管道传输到FINDSTR并写入文件,command-line,cmd,pipe,findstr,windows-console,Command Line,Cmd,Pipe,Findstr,Windows Console,我试图过滤正在运行的程序(ping)的输出,并将结果写入文件 在以下示例中,ping程序将一直运行,直到按下CTRL-C: ping www.google.com -t | findstr "Reply" >> file.txt 这样做的结果是创建了“file.txt”,但是内容是空的 另一方面,当使用CTRL-C中断时,以下代码(没有管道连接到findstr)将起作用 ping www.google.com -t >> file.txt 我在这里遗漏了什么?控制fi

我试图过滤正在运行的程序(ping)的输出,并将结果写入文件

在以下示例中,ping程序将一直运行,直到按下CTRL-C:

ping www.google.com -t | findstr "Reply" >> file.txt
这样做的结果是创建了“file.txt”,但是内容是空的

另一方面,当使用CTRL-C中断时,以下代码(没有管道连接到findstr)将起作用

ping www.google.com -t >> file.txt

我在这里遗漏了什么?

控制findstr命令的拼写区分大小写,您可以使用/I表示禁用的区分大小写,而不使用双引号

参数t不允许在文件中重定向,因为如果使用n参数文件,且回复数为“等待重播结束以查看结果文件”,则管道将在执行FINDSTR之前接收结果

ping www.google.com -n 200 | findstr /I reply  >> file.txt

当管道命令完成时,文件将被填充。但是,
ping-t
永远不会结束。您必须构建自己的循环(这有一些优点…):

:循环
>file.txt
ping-n 1 www.google.de | find/i“Reply”>>file.txt
ping-n2-w500 localhost>nul
转到:循环

第二个
ping
只是“500毫秒等待”。

只要尝试
for
循环即可

@echo off
(for /l %%a in (0) do ping -t -n 1 www.google.com | findstr /i "reply")>file.txt

ping
的文档中:

-t:Ping指定的主机,直到停止

这意味着它正在等待用户输入完成
ping
命令。
另一方面,管道等待输入,并将收到的任何输入重定向到
file.txt
(在这种情况下,没有收到输入,因为
ping
正在等待用户输入完成
ping
命令,所以创建了一个空白文件)

您可以首先将
ping
重定向到文件:
ping www.google.com-t>>file.txt

然后,当您有足够的ping时(通过Ctrl-C),使用
findstr

findstr“Reply”file.txt>>file2.txt

@echo off
(for /l %%a in (0) do ping -t -n 1 www.google.com | findstr /i "reply")>file.txt