找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 69535|回复: 21

[文本处理] 【已解决】批处理如何提取ping命令响应时间最短的IP并将相关信息输出到hosts文件?

[复制链接]
发表于 2016-1-6 12:39:27 | 显示全部楼层 |阅读模式
本帖最后由 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
  1. @echo off & setlocal EnableDelayedExpansion
  2. ping 1.1.1.1 -n 1| find "来自">>ip.txt
  3. ping 2.2.2.2 -n 1| find "来自">>ip.txt
  4. ping 3.3.3.3 -n 1| find "来自">>ip.txt
  5. ping 4.4.4.4 -n 1| find "来自">>ip.txt

  6. if "%1"=="sub" (
  7.     for /f "tokens=1-6" %%a in (ip.txt) do (
  8.         set "s=          %%e"        
  9.         echo !s:~-10! %%a %%b %%c %%d %%f
  10.     )
  11.     exit
  12. ) else (
  13.     >ip2.txt ( for /f "tokens=1-6" %%a in ('cmd /c %0 sub ^| sort /r ') do echo %%b %%c %%d %%e %%a %%f)
  14. )


  15. for /f "tokens=2-15 delims= " %%i in (ip2.txt) do set zz=%%i
  16. echo %zz%
  17. findstr /e /v /r /c:"google.com" "C:\Windows\System32\drivers\etc\hosts">>hosts
  18. echo %zz% qq.com>>hosts
  19. echo %zz% aa.com>>hosts
  20. echo %zz% vv.com>>hosts
  21. echo %zz% nne.com>>hosts
  22. copy hosts "C:\Windows\System32\drivers\etc\hosts" /y

  23. del hosts /f  /q
  24. del ip.txt /f  /q
  25. del ip2.txt /f  /q

复制代码

评分

参与人数 1PB -4 收起 理由
pcl_test -4 未按版规发帖

查看全部评分

 楼主| 发表于 2016-1-6 16:46:23 | 显示全部楼层
顶顶顶.............................
 楼主| 发表于 2016-1-6 16:55:11 | 显示全部楼层
顶顶顶.............................
发表于 2016-1-6 17:20:00 | 显示全部楼层
本帖最后由 CrLf 于 2016-1-6 19:46 编辑
  1. @mshta http://bathome.net/s/hta/?%random%^
  2.   type('ip.txt').split('\r\n')^
  3.   ._EACH(function(s){return {m:s.match(/时间=(\d+)ms/),s:s}})^
  4.   .sort(function(a,b){return b.m[1]-a.m[1]})^
  5.   ._EACH(function(o){return o.s})^
  6.   .join('\r\n') >ip.sort.txt
复制代码
 楼主| 发表于 2016-1-6 17:42:49 | 显示全部楼层
回复 4# CrLf

    谢谢你的回答

    你的的代码,我运行不了,,

    我研究了一个下午已经弄好了,,虽然我弄得很丑,但起码能用了
发表于 2016-1-6 18:31:58 | 显示全部楼层
本帖最后由 pcl_test 于 2016-1-12 02:46 编辑

水一发,提取最短响应时间
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "skip=1 tokens=1* delims=m" %%a in ('findstr "时间=" "%~f0"') do (
  4.     for /f "tokens=1-3 delims==" %%i in ("%%a") do (
  5.         for /f "tokens=2" %%x in ("%%i") do set #%%k=%%x
  6.         if not defined t (
  7.             set t=%%k
  8.         ) else if %%k leq !t! set t=%%k
  9.     )
  10. )
  11. echo;%t% !#%t%!
  12. pause&exit
  13. 来自 1.1.1.1 的回复: 字节=32 时间=111ms TTL=55
  14. 来自 2.2.2.2 的回复: 字节=32 时间=11ms TTL=55
  15. 来自 3.3.3.3 的回复: 字节=32 时间=96ms TTL=55
复制代码
 楼主| 发表于 2016-1-6 19:02:18 | 显示全部楼层
回复 6# pcl_test


    靓仔版主能否将这个代码,完美的加进顶楼的代码里面!
发表于 2016-1-6 19:05:01 | 显示全部楼层
回复 7# ksla

你都弄了一下午了,再弄个一晚上,也该可以完美了
 楼主| 发表于 2016-1-6 19:07:42 | 显示全部楼层
回复 8# pcl_test


    下午不用睡,晚上要睡觉,你这样子,我只好一边哭去...

评分

参与人数 1PB -4 收起 理由
pcl_test -4 水一发

查看全部评分

发表于 2016-1-6 19:24:49 | 显示全部楼层
  1. @echo off & setlocal enabledelayedexpansion
  2. if "%~1" == "sub" (
  3.     for /f "delims=" %%i in (IP.txt) do (
  4.         for /f "tokens=3 delims==m" %%j in ("%%i") do set "t=0000000000%%j"
  5.         echo;!t:~-10! %%i
  6.     )
  7. ) else (
  8.     for /f "tokens=1*" %%i in ('"%~f0" sub ^| sort') do echo;%%j
  9.     pause & exit
  10. )
复制代码
 楼主| 发表于 2016-1-6 19:34:29 | 显示全部楼层
回复 10# WHY


    帅了一点!!
 楼主| 发表于 2016-1-6 19:36:34 | 显示全部楼层
回复 8# pcl_test


    水一发PB -4

请问我又触犯了那条版规呢,,靓仔版主!
发表于 2016-1-6 19:46:36 | 显示全部楼层
回复 5# ksla


    已修改
发表于 2016-1-6 20:34:12 | 显示全部楼层
本帖最后由 WHY 于 2016-1-6 22:49 编辑

回复 11# ksla

伤脑筋,我以为能帅好多点的
  1. @echo off & setlocal enabledelayedexpansion

  2. (for %%i in (1.1.1.1 2.2.2.2 3.3.3.3) do ping %%i -n 1)|find "来自">ip.txt

  3. set "Min=9999999999"
  4. for /f "tokens=2,7 delims==m " %%i in (IP.txt) do (
  5.     set "s=0000000000%%j"
  6.     set "s=!s:~-10!"
  7.     if "!s!" lss "!Min!" set "Min=!s!" & set "_!Min!=%%i"
  8. )

  9. (
  10.     findstr /e /v /r /c:"google.com" "%SystemRoot%\System32\drivers\etc\hosts"
  11.     echo !_%Min%! qq.com
  12.     echo !_%Min%! aa.com
  13.     echo !_%Min%! vv.com
  14. )>"%~dp0hosts"

  15. copy /y "%~dp0hosts" "%SystemRoot%\System32\drivers\etc\hosts"
  16. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
ksla + 1 很好的哥们...

查看全部评分

 楼主| 发表于 2016-1-6 20:41:26 | 显示全部楼层
回复 14# WHY


    哥们,这次真的帅多了,但不能写入hosts
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 06:12 , Processed in 0.021396 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表