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

[网络连接] [已解决]查找当前在线的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
复制代码
代码运行正常,问题就是太耗时间了,有没有方法让它查找的速度再快些
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

关了 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 编辑 ]
1

评分人数

TOP

谢谢2楼的代码,效果果然快多了,但最后运行没有通过,提示windows找不到'write'

TOP

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

[ 本帖最后由 neorobin 于 2009-12-16 14:21 编辑 ]

TOP

谢谢楼上的,你的代码有些还不太懂,呵呵,去找找那些参数的作用。

TOP

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

TOP

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

TOP

有个办法,用"多进程"同时扫描..
start /b ping
但是如何解决 ping的返回值是个问题

TOP

原帖由 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
复制代码
1

评分人数

TOP

有了输出在线的IP,那么不在线的IP怎么输出到文本中呢?我是菜鸟请多包涵!

TOP

回复 10# aove


    我也想问这个问题,如何让9楼的代码运行后 显示1-255内剩余的ip呢(即显示ping不通的)
收入分四种:狂劳不得,多劳少得,少劳多得,不劳狂得。还好,我是第二种!

TOP

返回列表