我坚持这个,我设法创建了一个导入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
答案 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
命令将毫秒转换为秒(批处理文件不支持十进制数)
我的网络上没有任何其他计算机,因此我使用网址对其进行了测试。
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