Windows蝙蝠文件:如何处理ping.exe实时输出for循环?

我需要使用-t参数运行ping,并在bat脚本中处理每一行。 我需要实时做到这一点。

这段代码解释了我的问题。 Commant'ping -t 8.8.8.8'不会打印任何内容,因此没有任何内容被打印到控制台。 如果我使用“ping -n 10 8.8.8.8”,那么当ping退出时,所有的行都将被打印。

我怎样才能获得真正的打印线为循环?

@echo off Setlocal EnableDelayedExpansion FOR /f "TOKENS=*" %%i in ('ping -t 8.8.8.8') do ( set LINE=%%i echo !LINE! ) 

正如评论中所述; FOR命令不能处理正在进行的输出; 一旦进程终止,它将处理一组数据。

您将需要每次执行ping时只产生一组输出,以便能够捕获每个结果。 您还需要将结果集限制为ping结果并忽略其他行。

find命令将只返回包含pinged地址的结果(这里需要使用IP)

SKIP选项将跳过Ping返回的第一行,并引用IP地址。

For命令的主体中,将令牌存储到临时variables中,以便在For循环之外进行处理。

Goto :l_Break_Loop将使循环只接受来自Ping命令的一行输出并跳转到数据处理部分。

之后, Goto :l_Start_Loop将batch file指向循环的顶部,以查看另一行ping数据。

 @echo off Setlocal EnableDelayedExpansion :l_Start_Loop FOR /f "SKIP=1 TOKENS=*" %%i in ('ping -n 1 8.8.8.8 2^>&1 ^| Find /i "8.8.8.8"') do ( set LINE=%%i echo !LINE! Goto :l_Break_Loop ) :l_Break_Loop REM Start processing data retrieved from ping result REM End processing data retrieved from ping result Goto :l_Start_Loop 

您可以使用计时器function在ping尝试之间施加一个延迟时间,并通过某些分段程序操作%TIME%variables,只要延迟时间长于ping和处理时间,您甚至可以定期运行ping命令结果。

%TIME:~-8,2%返回分钟
%TIME:~-5,2%返回秒数
%TIME:~-2%返回百分之一秒