.bat - ping IP列表并仅回复响应时间

时间:2018-01-16 18:22:26

标签: batch-file exe ping

我坚持这个,我设法创建了一个导入IP列表的批处理文件。主机名,但是当我测试成功或失败时,我想输出它花了多长时间。我不知道如何捕获它并将其包含在输出中。我正在尝试隐藏默认的ping.exe输出。这是我的代码

@echo off
for /F "tokens=1,2 delims= " %%A in (computers.txt) do (
   rem ping -n 1 %%A | findstr /i "TTL=" | find "Reply" > nul
   if %errorlevel% == 0 ( 
   echo %%B %%A successful ping in ?? Seconds
   echo %%B %%A successful ping [%date%, %time%] >> log.txt
   )
)
Pause

1 个答案:

答案 0 :(得分:0)

我已经明白了:

@echo off
setlocal enableDelayedExpansion
for /F "tokens=1,2 delims= " %%A in (computers.txt) do (
    for /f "tokens=7 delims== " %%G in ('ping -n 1 %%A') do (
        ping -n 1 %%A >nul

        if errorlevel 1 (
            echo %%B %%A unsuccessful ping
            echo %%B %%A unsuccessful ping [!date!, !time!] >> log.txt
        ) else if "%%~G" NEQ "of" if "%%~G" NEQ "0" (
            set ms=%%~G
            set ms=!ms:ms=!
            for /f %%Z in ('powershell !ms!/1000') do set second=%%~Z
            echo %%B %%A successful ping in !second! seconds
            echo %%B %%A successful ping [!date!, !time!] >> log.txt
        )
    )
)
Pause

使用FOR /F,可以处理命令输出。

  • 正如您所看到的,我有2 ping -n 1 %%A。这是因为FOR /F不捕获处理命令生成的ERRORLEVEL。第一个命令获取输出,第二个命令获取ERRORLEVEL。

  • if "%%~G" NEQ "of" if "%%~G" NEQ "0"过滤掉不需要的结果。

  • powershell命令将毫秒转换为秒(批处理文件不支持十进制数)

I / O示例

我的网络上没有任何其他计算机,因此我使用网址对其进行了测试。

Input                -> Output
www.google.com A     A www.google.com successful ping in 0.002 seconds
www.yahoo.com B      B www.yahoo.com successful ping in 0.032 seconds
a.a.a C              C a.a.a unsuccessful ping