标题: [其他] [已解决]批处理for /f怎样获取ping结果中的时间值? [打印本页]
作者: missll 时间: 2011-4-22 21:15 标题: [已解决]批处理for /f怎样获取ping结果中的时间值?
本帖最后由 missll 于 2011-4-27 00:17 编辑
Pinging 111.92.232.155 with 32 bytes of data:
Reply from 111.92.232.155: bytes=32 time=80ms TTL=118
Ping statistics for 111.92.232.155:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 80ms, Maximum = 80ms, Average = 80ms
Pinging 222.126.39.91 with 32 bytes of data:
Reply from 222.126.39.91: bytes=32 time=174ms TTL=112
Ping statistics for 222.126.39.91:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 174ms, Maximum = 174ms, Average = 174ms
Pinging 114.142.154.121 with 32 bytes of data:
Reply from 114.142.154.121: bytes=32 time=67ms TTL=115
Ping statistics for 114.142.154.121:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 67ms, Maximum = 67ms, Average = 67ms
________________________________________________________________
4行 Reply from 111.92.232.155: bytes=32 time=80ms TTL=118
13行 Reply from 222.126.39.91: bytes=32 time=174ms TTL=112
22行 Reply from 114.142.154.121: bytes=32 time=67ms TTL=115
我想取文本中的 以上这3行 "time=" 之后 "ms" 之前的值 并且赋予3个变量- @echo off
- for /f "skip=3 delims=? tokens=?" %%i in (ip.txt) do (
- set %%i
- set %%j
- set %%k )
复制代码
作者: hanyeguxing 时间: 2011-4-22 21:33
本帖最后由 hanyeguxing 于 2011-4-22 21:39 编辑
- @echo off
- for /f "tokens=1,3,8 delims=m:=<> " %%a in (ip.txt) do if /i "%%a"=="Reply" set ip_%%b=%%c
- set ip_
- pause
复制代码
- @echo off&setlocal enableDelayedExpansion
- for /f "tokens=1,8 delims=m:=<> " %%a in (ip.txt) do if /i "%%a"=="Reply" set/a a+=1&set ip_!a!=%%c
- for /l %%a in (1 1 %a%) do echo !ip_%%a!
- pause
复制代码
作者: escortmnm 时间: 2011-4-22 21:38
- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1-5" %%a in (ip.txt) do (
- if /i "%%a"=="Reply" (
- set t=%%e
- set t=!t:~5,-2!
- echo !t!))
- pause
复制代码
作者: Batcher 时间: 2011-4-22 23:10
1# missll
这里有个实例:
http://bbs.bathome.net/viewthread.php?tid=4193#pid26844
作者: applba 时间: 2011-4-24 10:05
本帖最后由 applba 于 2011-4-25 11:56 编辑
我来个简单的
可以直接调用:getip www.qq.com
如果没有参数,默认是www.163.com- @echo off
- set sites=%1
- if "%sites%"=="" set sites=www.163.com
- ping %sites% >ping.txt
- for /f "tokens=3" %%i in ('find /i "pinging" ping.txt') do set b=%%i
- echo %b:~1,-1%
- pause
复制代码
作者: missll 时间: 2011-4-25 05:53
本帖最后由 missll 于 2011-4-25 05:55 编辑
非常感谢你的回帖
揣摩了很久我才弄明白了1 3 8 节段. 但是我还是不明白[code]"delims=m:=<> " 这里的<> 是什么意思 ,难道是论坛转换的问题?
Reply from 123.132.254.15: bytes=32 time=22ms TTL=58
我的理解是以上节段 和返回的数值是一样的.
第2段代码我还是没看懂...
另外想问 例如 set XXXXXX 这样的变量如何删除掉? 它不象set aa=bb 一样 我可以使用 set aa= 删除掉.
@echo off
for /f "tokens=1,3,8 delims=m:= " %%a in (ip.txt) do if /i "%%a"=="Reply" set ip_%%b=%%c
set ip_
pause@echo off&setlocal enableDelayedExpansion
for /f "tokens=1,8 delims=m:= " %%a in (ip ...
hanyeguxing 发表于 2011-4-22 21:33
作者: missll 时间: 2011-4-25 05:57
非常感谢你的回帖
让我从中学习到 set 取值中的 语法, 查看SET /? 中也有例子, 谢谢。
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1-5" %%a in (ip.txt) do (
if /i "%%a"=="Reply" (
set t=%%e
set t=!t:~5,-2!
echo !t!))
pause
escortmnm 发表于 2011-4-22 21:38
作者: missll 时间: 2011-4-25 05:58
非常感谢给予的帮助 我已仔细查看此链接
作者: missll 时间: 2011-4-25 06:00
非常感谢你的回帖 但是这不是我要的结果,因为它只输出了 IP地址 原因是find /i "pinging"这行中并没有TIMES的值.
我来个简单的:
@echo off
set sites=%1
if "%sites%"=="" set sites=www.163.com
ping %sites% >ping.txt
find /i "pinging" ping2.txt
for /f "tokens=3" %%i in (ping2.txt) do set b=%%i
echo %b:~1,-1% ...
applba 发表于 2011-4-24 10:05
作者: hanyeguxing 时间: 2011-4-25 07:23
本帖最后由 hanyeguxing 于 2011-4-25 07:30 编辑
Reply from 222.126.39.91: bytes=32 time=174ms TTL=112
Reply是第1段,用来区分行,fro是第2段,222.126.39.91是第3段,bytes是第4段,32是第5段,ti是第6段,e是第7段,174就是第8段
time=174ms,把174和ms分隔开,方法有很多,使用字母m分隔就是其中之一。174前的符号可能为=或<或>,所以均要分隔
空格是用来分隔Reply的
set ip_不是用来设置,而是用来显示的,显示所有ip_开头变量的变量
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |