Windows CMD:如何将正在运行的程序输出传输到FINDSTR并写入文件

3

我试图过滤一个正在运行的程序(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

这里我错过了什么?

4个回答

4

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

参数t不允许将结果重定向到文件,因为管道在执行FINDSTR之前接收结果。如果使用n参数文件并指定回复数量,则需要等待回复结束才能查看结果文件。

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

1

尝试一个for循环

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

有没有办法将输出写入控制台? - Cardinal System

0

来自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


0

当管道命令完成时,文件将被填充。但是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 只是一个 "500ms 的等待"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接