我有一个脚本连续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)匹配,那么它仍然会出现离线状态?
提前致谢
答案 0 :(得分:2)
也许
ping %%i -n 1 | find "TTL=" |findstr /b /l /v /c:"Reply from 10.79.208." >nul
只有在找到errorlevel
和TTL=
文字字符串/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=!"
)
)
)
)