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

Windows CMD: How to pipe running program output to FINDSTR and write to file

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

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

ping www.google.com -t | findstr "Reply" >> file.txt

其结果是创建了 'file.txt',但是,内容是 空的

另一方面,以下代码 没有 管道到 findstr 在被 CTRL-C

中断时工作
ping www.google.com -t >> file.txt

我在这里错过了什么?

控制 findstr 命令的拼写区分大小写您可以使用 /I 来禁用区分大小写并且不要使用 双引号

参数 t 不允许在文件中重定向,因为如果使用带有 Reply 数量的 n 参数文件,管道会在执行 FINDSTR 之前接收结果,等待重放结束以查看结果文件。

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

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

:loop
<nul set /p "=%time% " >>file.txt
ping -n 1 www.google.de|find /i "Reply" >>file.txt
ping -n 2 -w 500 localhost >nul
goto :loop

第二个 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 the specified host until stopped.

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

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

然后当你有足够的 ping 时(通过 Ctrl-C),用 findstr 过滤:
findstr "Reply" file.txt >> file2.txt