Batch File Filter loop output

Solution 1:

:DoPing
FOR %%A IN (%host%) DO (
    set "pung="
    for /F "tokens=* skip=2" %%A in ('ping %%A -n 1 ') do  if not defined pung (
        echo %date:~4%, %time:~0,2%:%time:~3,2%:%time:~6,2%, %%A>>%logfile%
        echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2%, %%A
        set "pung=Y"
    )
)
IF (%counter% LSS 2)  timeout 1 >NUL
GOTO DoPing

(I'm allergic to using keywords/executable names as labels)

Simply set a flag value pung to nothing so that it is undefined when the pings start. On reporting the first line, set pung to non-empty, so it is then defined and the remining report lines are suppressed.

Next loop of %%A clears pung before issuing the ping for the next host...


Another way:

:DoPing
FOR %%A IN (%host%) DO (
    for /F "tokens=1* skip=2" %%A in ('ping %%A -n 1 ') do if "%%A" == "Reply" (
        echo %date:~4%, %time:~0,2%:%time:~3,2%:%time:~6,2%, %%A %%B>>%logfile%
        echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2%, %%A %%B
    )
)
IF (%counter% LSS 2)  timeout 1 >NUL
GOTO DoPing

This time, see whether the first token is the string Reply and only write the report if this is so.