
标题: [网络连接] [已解决]查找当前在线的IP的批处理如何提高效率? [打印本页]
作者: wsjxwj 时间: 2009-12-16 12:16 标题: [已解决]查找当前在线的IP的批处理如何提高效率?
由于最近我师傅太忙了,所以写的代码师傅没时间帮我改进,只好上贴来请各位大侠帮忙改进- @echo off
- @echo 当前在线的IP有:>1.txt
- for /f "tokens=3-5 delims=.: " %%a in ('ipconfig /all^|findstr /ic:"default gateway"') do (
- for /l %%i in (1,1,255) do (
- ping -n 1 -l 1 %%a.%%b.%%c.%%i && echo %%a.%%b.%%c.%%i>>1.txt
- )
- )
- msg * /w 扫描IP完成,点确定查看当前在线的IP
- start 1.txt&goto :eof
复制代码
代码运行正常,问题就是太耗时间了,有没有方法让它查找的速度再快些
作者: neorobin 时间: 2009-12-16 13:01
关了 PING 的回显, 加了几个参数, PING 完用了 70 多秒- @echo off & mode con cols=85 lines=2 & setlocal enabledelayedexpansion
- (echo 扫描起始: !time!>~) & (echo 当前在线的IP有:>>~)
- for /f "tokens=3-5 delims=.: " %%a in ('ipconfig /all^|findstr /ic:"default gateway"') do (
- for /l %%i in (1,1,255) do (
- (set /a k=%%i * 100 /255) & (title !k!%%) & (set /a j=%%i %% 3) & if "!j!"=="0" (set /p=^>< nul)
- ping -n 1 -l 1 -w 20 -i 10 -s 1 %%a.%%b.%%c.%%i>nul && echo %%a.%%b.%%c.%%i>>~
- )) & (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的返回值是个问题
看了楼上的贴,再经师傅教导,再贴出扫描效率更高的代码:- @echo off
- arp -d
- for /f "tokens=3-5 delims=.: " %%a in ('ipconfig /all^|findstr /ic:"default gateway"') do (
- for /l %%d in (1,1,255) do start /b ping /n 1 %%a.%%b.%%c.%%d
- )
- ping /n 11 127.1>nul
- cls&for /f %%a in ('arp -a^|findstr "dynamic"') do echo %%a
- pause>nul
复制代码
作者: aove 时间: 2012-5-21 01:34
有了输出在线的IP,那么不在线的IP怎么输出到文本中呢?我是菜鸟请多包涵!
作者: beck1321 时间: 2012-9-14 23:52
回复 10# aove
我也想问这个问题,如何让9楼的代码运行后 显示1-255内剩余的ip呢(即显示ping不通的)
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |