标题: [文本处理] 【已解决】批处理如何提取ping命令响应时间最短的IP并将相关信息输出到hosts文件? [打印本页]
作者: ksla 时间: 2016-1-6 12:39 标题: 【已解决】批处理如何提取ping命令响应时间最短的IP并将相关信息输出到hosts文件?
本帖最后由 ksla 于 2016-1-6 22:22 编辑
运行下面脚本会生成一个ip.txt文件,内容为下方,原生生成的文件是根据ping ip的顺序排列的,想改成响应时间最少的IP排行到最下方!
-------------------上面的问题我已经折腾了一个的下午,到处抄一下,终于解决了,脚本已经达到我的目的了---------------------
---------------------但看着它觉得真的太样衰了,各位大大,能否帮忙将它优化一下---------------------
按ping ip顺序排列:
来自 1.1.1.1 的回复: 字节=32 时间=111ms TTL=55
来自 2.2.2.2 的回复: 字节=32 时间=11ms TTL=55
来自 3.3.3.3 的回复: 字节=32 时间=96ms TTL=55
改成按响应时间最少的值在最下方
来自 3.3.3.3 的回复: 字节=32 时间=111ms TTL=55
来自 1.1.1.1 的回复: 字节=32 时间=96ms TTL=55
来自 2.2.2.2 的回复: 字节=32 时间=11ms TTL=55- @echo off & setlocal EnableDelayedExpansion
- ping 1.1.1.1 -n 1| find "来自">>ip.txt
- ping 2.2.2.2 -n 1| find "来自">>ip.txt
- ping 3.3.3.3 -n 1| find "来自">>ip.txt
- ping 4.4.4.4 -n 1| find "来自">>ip.txt
-
- if "%1"=="sub" (
- for /f "tokens=1-6" %%a in (ip.txt) do (
- set "s= %%e"
- echo !s:~-10! %%a %%b %%c %%d %%f
- )
- exit
- ) else (
- >ip2.txt ( for /f "tokens=1-6" %%a in ('cmd /c %0 sub ^| sort /r ') do echo %%b %%c %%d %%e %%a %%f)
- )
-
-
- for /f "tokens=2-15 delims= " %%i in (ip2.txt) do set zz=%%i
- echo %zz%
- findstr /e /v /r /c:"google.com" "C:\Windows\System32\drivers\etc\hosts">>hosts
- echo %zz% qq.com>>hosts
- echo %zz% aa.com>>hosts
- echo %zz% vv.com>>hosts
- echo %zz% nne.com>>hosts
- copy hosts "C:\Windows\System32\drivers\etc\hosts" /y
-
- del hosts /f /q
- del ip.txt /f /q
- del ip2.txt /f /q
复制代码
作者: ksla 时间: 2016-1-6 16:46
顶顶顶.............................
作者: ksla 时间: 2016-1-6 16:55
顶顶顶.............................
作者: CrLf 时间: 2016-1-6 17:20
本帖最后由 CrLf 于 2016-1-6 19:46 编辑
- @mshta http://bathome.net/s/hta/?%random%^
- type('ip.txt').split('\r\n')^
- ._EACH(function(s){return {m:s.match(/时间=(\d+)ms/),s:s}})^
- .sort(function(a,b){return b.m[1]-a.m[1]})^
- ._EACH(function(o){return o.s})^
- .join('\r\n') >ip.sort.txt
复制代码
作者: ksla 时间: 2016-1-6 17:42
回复 4# CrLf
谢谢你的回答
你的的代码,我运行不了,,
我研究了一个下午已经弄好了,,虽然我弄得很丑,但起码能用了
作者: pcl_test 时间: 2016-1-6 18:31
本帖最后由 pcl_test 于 2016-1-12 02:46 编辑
水一发,提取最短响应时间- @echo off
- setlocal enabledelayedexpansion
- for /f "skip=1 tokens=1* delims=m" %%a in ('findstr "时间=" "%~f0"') do (
- for /f "tokens=1-3 delims==" %%i in ("%%a") do (
- for /f "tokens=2" %%x in ("%%i") do set #%%k=%%x
- if not defined t (
- set t=%%k
- ) else if %%k leq !t! set t=%%k
- )
- )
- echo;%t% !#%t%!
- pause&exit
- 来自 1.1.1.1 的回复: 字节=32 时间=111ms TTL=55
- 来自 2.2.2.2 的回复: 字节=32 时间=11ms TTL=55
- 来自 3.3.3.3 的回复: 字节=32 时间=96ms TTL=55
复制代码
作者: ksla 时间: 2016-1-6 19:02
回复 6# pcl_test
靓仔版主能否将这个代码,完美的加进顶楼的代码里面!
作者: pcl_test 时间: 2016-1-6 19:05
回复 7# ksla
你都弄了一下午了,再弄个一晚上,也该可以完美了
作者: ksla 时间: 2016-1-6 19:07
回复 8# pcl_test
下午不用睡,晚上要睡觉,你这样子,我只好一边哭去...
作者: WHY 时间: 2016-1-6 19:24
- @echo off & setlocal enabledelayedexpansion
- if "%~1" == "sub" (
- for /f "delims=" %%i in (IP.txt) do (
- for /f "tokens=3 delims==m" %%j in ("%%i") do set "t=0000000000%%j"
- echo;!t:~-10! %%i
- )
- ) else (
- for /f "tokens=1*" %%i in ('"%~f0" sub ^| sort') do echo;%%j
- pause & exit
- )
复制代码
作者: ksla 时间: 2016-1-6 19:34
回复 10# WHY
帅了一点!!
作者: ksla 时间: 2016-1-6 19:36
回复 8# pcl_test
水一发PB -4
请问我又触犯了那条版规呢,,靓仔版主!
作者: CrLf 时间: 2016-1-6 19:46
回复 5# ksla
已修改
作者: WHY 时间: 2016-1-6 20:34
本帖最后由 WHY 于 2016-1-6 22:49 编辑
回复 11# ksla
伤脑筋,我以为能帅好多点的- @echo off & setlocal enabledelayedexpansion
-
- (for %%i in (1.1.1.1 2.2.2.2 3.3.3.3) do ping %%i -n 1)|find "来自">ip.txt
-
- set "Min=9999999999"
- for /f "tokens=2,7 delims==m " %%i in (IP.txt) do (
- set "s=0000000000%%j"
- set "s=!s:~-10!"
- if "!s!" lss "!Min!" set "Min=!s!" & set "_!Min!=%%i"
- )
-
- (
- findstr /e /v /r /c:"google.com" "%SystemRoot%\System32\drivers\etc\hosts"
- echo !_%Min%! qq.com
- echo !_%Min%! aa.com
- echo !_%Min%! vv.com
- )>"%~dp0hosts"
-
- copy /y "%~dp0hosts" "%SystemRoot%\System32\drivers\etc\hosts"
- pause
复制代码
作者: ksla 时间: 2016-1-6 20:41
回复 14# WHY
哥们,这次真的帅多了,但不能写入hosts
作者: ksla 时间: 2016-1-6 20:44
回复 14# WHY
:handshake :handshake :handshake :handshake :handshake
越看你的代码越觉得你好利害!!
作者: ksla 时间: 2016-1-6 20:58
本帖最后由 ksla 于 2016-1-6 22:20 编辑
回复 14# WHY
非常感谢
作者: ksla 时间: 2016-1-6 21:30
本帖最后由 ksla 于 2016-1-6 22:20 编辑
回复 14# WHY
非常感谢
作者: gawk 时间: 2016-1-6 21:41
- sort -t "=" -k3,3 -n -r 1.txt > 2.txt
复制代码
使用 GNU 的 sort.exe 可以大大简化排序的代码
作者: ksla 时间: 2016-1-6 22:21
回复 19# gawk
好的,,我研究一下!
作者: WHY 时间: 2016-1-6 22:35
回复 15# ksla
14#改了,你再试下
move 不能写到hosts,那就copy好了
作者: ksla 时间: 2016-1-6 22:40
回复 21# WHY
谢谢你!!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |