[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】批处理如何提取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
  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
复制代码
1

评分人数

回复 21# WHY


    谢谢你!!

TOP

回复 15# ksla


    14#改了,你再试下
move 不能写到hosts,那就copy好了

TOP

回复 19# gawk


    好的,,我研究一下!

TOP

  1. sort -t "=" -k3,3 -n -r 1.txt > 2.txt
复制代码
使用 GNU 的 sort.exe 可以大大简化排序的代码
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

本帖最后由 ksla 于 2016-1-6 22:20 编辑

回复 14# WHY


非常感谢

TOP

本帖最后由 ksla 于 2016-1-6 22:20 编辑

回复 14# WHY

非常感谢

TOP

回复 14# WHY

:handshake :handshake :handshake :handshake :handshake

    越看你的代码越觉得你好利害!!

TOP

回复 14# WHY


    哥们,这次真的帅多了,但不能写入hosts

TOP

本帖最后由 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

评分人数

    • ksla: 很好的哥们...技术 + 1

TOP

回复 5# ksla


    已修改

TOP

回复 8# pcl_test


    水一发PB -4

请问我又触犯了那条版规呢,,靓仔版主!

TOP

回复 10# WHY


    帅了一点!!

TOP

  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. )
复制代码

TOP

回复 8# pcl_test


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

评分人数

TOP

返回列表