Board logo

标题: [网络连接] [已解决]查找当前在线的IP的批处理如何提高效率? [打印本页]

作者: wsjxwj    时间: 2009-12-16 12:16     标题: [已解决]查找当前在线的IP的批处理如何提高效率?

由于最近我师傅太忙了,所以写的代码师傅没时间帮我改进,只好上贴来请各位大侠帮忙改进
  1. @echo off
  2. @echo 当前在线的IP有:>1.txt
  3. for /f "tokens=3-5 delims=.: " %%a in ('ipconfig /all^|findstr /ic:"default gateway"') do (
  4.     for /l %%i in (1,1,255) do (
  5.   ping -n 1 -l 1 %%a.%%b.%%c.%%i && echo %%a.%%b.%%c.%%i>>1.txt
  6. )
  7. )
  8. msg * /w 扫描IP完成,点确定查看当前在线的IP
  9. start 1.txt&goto :eof
复制代码
代码运行正常,问题就是太耗时间了,有没有方法让它查找的速度再快些
作者: neorobin    时间: 2009-12-16 13:01

关了 PING 的回显, 加了几个参数, PING 完用了 70 多秒
  1. @echo off & mode con cols=85 lines=2 & setlocal enabledelayedexpansion
  2. (echo 扫描起始: !time!>~) & (echo 当前在线的IP有:>>~)
  3. for /f "tokens=3-5 delims=.: " %%a in ('ipconfig /all^|findstr /ic:"default gateway"') do (
  4.   for /l %%i in (1,1,255) do (
  5.     (set /a k=%%i * 100 /255) & (title !k!%%) & (set /a j=%%i %% 3) & if "!j!"=="0" (set /p=^>< nul)
  6.     ping -n 1 -l 1 -w 20 -i 10 -s 1 %%a.%%b.%%c.%%i>nul && echo %%a.%%b.%%c.%%i>>~
  7. )) & (echo 扫描终止: !time!>>~)&(start write ~) & exit
复制代码

[ 本帖最后由 neorobin 于 2009-12-16 13:43 编辑 ]
作者: wsjxwj    时间: 2009-12-16 14:14

谢谢2楼的代码,效果果然快多了,但最后运行没有通过,提示windows找不到'write'
作者: neorobin    时间: 2009-12-16 14:17

那就改 notepad
write.exe 是写字板的一个老版本, 常见的是 wordpad.exe
记事本 notepad
上面的加了进度条显示, 标题进度百分数, 会多耗时 1 分钟左右, 我不用任何显示时, 可到 70 多秒, 那些参数再改小的话, 不稳定的网络可能会漏掉 某些活动 IP

[ 本帖最后由 neorobin 于 2009-12-16 14:21 编辑 ]
作者: wsjxwj    时间: 2009-12-16 14:23

谢谢楼上的,你的代码有些还不太懂,呵呵,去找找那些参数的作用。
作者: neorobin    时间: 2009-12-16 14:27

hh %windir%\Help\ntcmds.chm::/ping.htm
http://technet.microsoft.com/zh-cn/library/cc773052(WS.10).aspx
当然也可以看咱们 BATHOME 这里的解释
作者: neorobin    时间: 2009-12-16 14:30

我除了加了几个 PING 的参数, 在实质上和你的原代码没有区别, 标题和进度条那是无关紧要的, 事实上它们还耗了时间
作者: caruko    时间: 2009-12-16 17:45

有个办法,用"多进程"同时扫描..
start /b ping
但是如何解决 ping的返回值是个问题
作者: wsjxwj    时间: 2009-12-17 16:02

原帖由 caruko 于 2009-12-16 17:45 发表
有个办法,用"多进程"同时扫描..
start /b ping
但是如何解决 ping的返回值是个问题


看了楼上的贴,再经师傅教导,再贴出扫描效率更高的代码:
  1. @echo off
  2. arp -d
  3. for /f "tokens=3-5 delims=.: " %%a in ('ipconfig /all^|findstr /ic:"default gateway"') do (
  4.     for /l %%d in (1,1,255) do start /b ping /n 1 %%a.%%b.%%c.%%d
  5. )
  6. ping /n 11 127.1>nul
  7. cls&for /f %%a in ('arp -a^|findstr "dynamic"') do echo %%a
  8. pause>nul
复制代码

作者: aove    时间: 2012-5-21 01:34

有了输出在线的IP,那么不在线的IP怎么输出到文本中呢?我是菜鸟请多包涵!
作者: beck1321    时间: 2012-9-14 23:52

回复 10# aove


    我也想问这个问题,如何让9楼的代码运行后 显示1-255内剩余的ip呢(即显示ping不通的)




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2