2016-10-12 21 views
2

マシン(SiteName.txtに格納されている)を連続してpingするスクリプトがあります。マシンがオンラインになると、カウンタが増分され、マシンがリストから削除され、もう一度pingを実行します(マシンがオンラインになっているかどうかを知る必要があります。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

のおかげで

両方 TTL=が見つかり、ラインが /l文字列リテラルで( /b)開始されている場合にのみ /c:「10.79.208から返信ゼロに errorlevelを設定する必要があり
ping %%i -n 1 | find "TTL=" |findstr /b /l /v /c:"Reply from 10.79.208." >nul 

" /vないはおそらく、あなたのスクリプトに、このわずかな変更はあなたが後にしているものです

+0

まさに私が必要としたものです。ありがとうございました。 –

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=!" 
      ) 
     ) 
    ) 
) 
関連する問題