批量文件过滤掉ping结果

时间:2016-10-12 05:43:58

标签: batch-file

我有一个脚本连续ping一组机器(存储在SiteName.txt中),一旦机器上线,计数器递增,机器从列表中删除,因此它不会再次ping通(我只需要知道一台机器是否已经上线,而不是现在它是否正常运行。

我遇到的问题是我注意到有一些幻影出现在他们建立的网站的IP地址(并且IP还没有被另一台机器接管)所以我得到了误报。

我目前的代码是:

@echo off & setlocal EnableDelayedExpansion

TITLE %~n0

set /a counteron=0

for /F %%a in (%~n0.txt) do set "NVC=!NVC! %%a"

:ping
ping -n 61 127.0.0.1>nul
for %%i in (%NVC%) do (
    ping %%i -n 1 | find "TTL=" >nul 
    if !errorlevel! GEQ 1 (
        echo %%i is offline.
    ) else (
        set /a counteron+=1
        echo %%i is online
    set "NVC=!NVC: %%i=!"
    )
)

echo.
cls
echo. %counteron% machines are online.
if defined NVC goto :ping

cls
echo All machines in %~n0 are online.
pause

是否有可能做同样的事情,但如果IP的前3个八位字节与特定集合(10.79.208.xxx)匹配,那么它仍然会出现离线状态?

提前致谢

2 个答案:

答案 0 :(得分:2)

也许

ping %%i -n 1 | find "TTL=" |findstr /b /l /v /c:"Reply from 10.79.208." >nul

只有在找到errorlevelTTL=文字字符串/b&#开头(/l)的行时才应将/c:设置为零34; 2008年7月10日的答复。"是/v 找到

我认为这是你的追求......

答案 1 :(得分:0)

也许您对脚本的这种轻微改动就是您所追求的。

@echo off & setlocal enabledelayedexpansion
set nvc=192.168.1.1
for %%i in (%NVC%) do (
    ping %%i -n 1 | find "TTL=" >nul 
    if !errorlevel! GEQ 1 (
        echo %%i is offline.
    ) else (
        for /f "tokens=1,2,3 delims=." %%j in ("%%i") do (
            set octets=%%j.%%k.%%l
            if "!octets!"=="10.79.208" (
                echo %%i is false positive
            ) else (
                set /a counteron+=1
                echo %%i is online
                set "NVC=!NVC: %%i=!"
            )
        )
    )
)