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

[文本处理] 关于用批处理选取最快IP的代码修缮

本帖最后由 宫商角徵羽 于 2014-6-27 14:42 编辑

以下是在IP_list.txt中选取最快IP的代码
  1. @echo off
  2. title=THE_IP
  3. mode con cols=50 lines=35
  4. color A
  5. @echo off
  6. setlocal enabledelayedexpansion&cls
  7. for /f "tokens=* usebackq delims=" %%a in ("IP_list2.txt") do (
  8. ping %%a
  9. echo ping %%a ......
  10. for /f "tokens=6 delims= = " %%A in ('ping %%a 2^>nul^|findstr /i "Avenue"') do (
  11. set _time=%%~nxA
  12. set _time=!_time:ms=!
  13. set _time=!_time:~,-1!
  14. if not defined min (set min=!_time!&set _IP=%%a)
  15. if !_time! lss !min! (set min=!_time!&set _IP=%%a)
  16. echo min=!min!
  17. echo.
  18. ))
  19. echo min=%min%  IP=%_IP%
  20. pause
复制代码
问题一:运行中的问题是:Average后返回时间有的是两位数,有的是三位数,程序应该如何修缮??
Average = 25
Average = 300

问题二:对于win7中文版用户CMD中返回的结果为中文,Average找不到,直接改成中文好象不太行,请问此处又该如何处理?

问题三: 如果希望对IP列表按返回速度进行排序,选取最快的10个地址,又该如何编写?

提供IP_list.txt
74.125.31.1
74.125.31.31
74.125.31.60
74.125.31.61
74.125.31.62
74.125.31.65



{源代码源自本论坛 hfg1977 特此感谢}
{感谢xxpinqz!对问题一、二的答复,详见2楼}

  1. for /f "tokens=4 delims==" %%A in ('ping %%a 2^>nul^|findstr /i "Average 平均"') do (
复制代码
第12行改为上面的,同时删除第15行后看看
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 2# xxpinqz


    多谢!两个问题都解决了,而且效果非常好!

    此处省略1024个赞!!!!

继续追问:

我现在想对几个IP地址按返回速度进行排序,选取最快的前10个,又要如何编写???

TOP

我跟帖分享另一种解决方案,喜欢的可以试试,不喜勿看:

http://www.bathome.net/thread-30586-1-1.html
返回ping超时次数,和统计时间的ps脚本

http://www.bathome.net/thread-30668-1-1.html
bat接收powershell返回值

可以用select-object  -first 10 选出前10个,
可以用sort-object 正序,倒序 筛选
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 3# 宫商角徵羽
iP不多的话,简单点这样子。
输出:前10个就是最快的10组
@echo off&setlocal enabledelayedexpansion
set n=1000
for /f "delims=" %%a in (IP_list.txt) do (
  for /f "tokens=6 delims==m" %%i in ('ping /n 2 %%a 2^>nul^|findstr /i "Average 平均"') do (
    set /a n+=1,t=%%i+10000
    set #!t!#!n!=%%a
))
set #
pause
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 5# xxpinqz


    32个赞加32个感谢!!!

不过,
    set /a n+=1,t=%%i+10000
    set #!t!#!n!=%%a
    是属于什么语法点,论坛中有没有讲解?   多谢点拨?

TOP

回复 5# xxpinqz


    这里所说的“不是太多”具体是多少?
    或者说这种“记忆”的上限是多少?需要突破这一上限的话又该如何?

TOP

返回列表