我想制作一个批处理文件来ping {IP地址1.30.200.3
:
Pinging 1.30.200.3 with 32 bytes of data:
Reply from 1.30.200.3: bytes=32 time=28ms TTL=124
Reply from 1.30.200.3: bytes=32 time=28ms TTL=124
Reply from 1.30.200.3: bytes=32 time=27ms TTL=124
Reply from 1.30.200.3: bytes=32 time=27ms TTL=124
Ping statistics for 1.30.200.3:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 27ms, Maximum = 28ms, Average = 27ms
我需要询问"Received" >= 2
是否只输入一行如下:
Reply from 1.30.200.3: bytes=32 time=28ms TTL=124
否则
输入已接收的数量和"Failure"
OutPut赞这个 如果收到的数据包大于等于
"来自1.30.200.3的回复:bytes = 32 time = 28ms TTL = 124"
或者如果不超过等于2 OUTPut赞这个
"收到= 0&失败"
答案 0 :(得分:0)
:loop
wmic /append:"textfile.txt" path win32_pingstatus where "address='127.0.0.1' and responsetime > 2" get responsetime,timestamprecord
goto loop
另一个例子
wmic /append:"textfile.txt" path win32_pingstatus where "address='127.0.0.1' and responsetime >= 0 and statuscode is not null" get responsetime,timestamprecord,statuscode
寻求帮助 -
wmic /?
wmic path Win32_PingStatus /?
wmic path Win32_PingStatus get /?
wmic format /?
wmic append /?
另见https://msdn.microsoft.com/en-us/library/aa394350%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396各种常数的含义。
答案 1 :(得分:0)
call :check www.google.com
call :check www.notexist.xxx
goto :eof
:check
ping %1>ping.tmp
for /f %%i in ('type ping.tmp^|find /c "TTL="') do set count=%%i
for /f "tokens=*" %%i in ('type ping.tmp^|find "TTL="') do set output=%%i
if %count% geq 2 (echo %output%) else (echo Received = %count% ^& Failure)
del ping.tmp
TTL=
比Recieved
更可靠(它独立于语言)(并且更容易解析)
答案 2 :(得分:0)
您已经有其他答案了。基本上,此代码解析ping
命令的输出。无论英语Windows 7输出什么,它都是硬编码的。这应该被认为是脆弱的,因为它可能不适用于其他语言,也可能不适用于其他Windows版本。
SETLOCAL ENABLEDELAYEDEXPANSION
SET EXITCODE=0
SET HOSTNAME=localhost
SET TEMP_FILE=%TEMP%\pingcount_!RANDOM!_!RANDOM!.tmp
ping>"%TEMP_FILE%" %HOSTNAME%
SET EXITCODE=%ERRORLEVEL%
IF %EXITCODE% NEQ 0 (
ECHO host %HOSTNAME% not found
GOTO TheEnd
)
SET REP_LINE=
FOR /F "usebackq skip=1 tokens=*" %%a IN (`type "%TEMP_FILE%"`) DO (
IF "!REP_LINE!" EQU "" (SET REP_LINE=%%a)
)
FOR /F "usebackq tokens=1-7 delims=, " %%a IN (`FINDSTR /C:"Packets: Sent" "%TEMP_FILE%"`) DO (
SET RCOUNT=%%g
)
IF %RCOUNT% GEQ 2 (
ECHO %REP_LINE%
) ELSE (
ECHO Received = %RCOUNT%, Failure
)
:TheEnd
IF EXIST "%TEMP_FILE%" (DEL "%TEMP_FILE%"
EXIT %EXITCODE%