Board logo

标题: [网络连接] [已解决]批处理如何检测局域网在线计算机名与ip地址,并保存到txt文件中? [打印本页]

作者: ygqiang    时间: 2011-12-29 14:41     标题: [已解决]批处理如何检测局域网在线计算机名与ip地址,并保存到txt文件中?

本帖最后由 ygqiang 于 2011-12-30 18:11 编辑
  1. @echo off
  2. for /f "tokens=15 delims= " %%i in ('ipconfig ^| find /i "IP Address"') do (
  3.     set fsip=%%i
  4. )
  5. echo %fsip%
  6. pause
  7. for /f "tokens=1,2,3 delims=." %%i in ("%fsip%") do (
  8.     set a=%%i.%%j.%%k
  9. )
  10. set Gateway=%a%.1
  11. echo %a%
  12. pause
  13. del /f /q 在线ip.txt
  14. del /f /q 离线ip.txt
  15. for /l %%m in (1,1,254) do (
  16.         ping.exe %a%.%%m -n 1 -w 300 >nul&&echo %a%.%%m>>在线ip.txt||echo %a%.%%m>>离线ip.txt
  17. )
  18. exit
复制代码
这个bat的功能是:
机器都装xp系统,检测局域网在线ip,并保持到txt文件中

能否添加代码,实现如下功能:

1、在txt文件中,前面显示计算机名字,后面显示对应的ip,比如下面这种:
bbjy                   192.168.9.27
bnjy                   192.168.9.26
ZWTSJYS2          192.168.9.28
wjljfn001            192.168.9.32

最好ip地址最前面,都是距离计算机名的最前面20个字符(因为有的计算机名比较长)

这个只要上面与下面的ip地址大体能对齐就可以,不需要太严格

2、同一个局域网中,计算机的工作组不同,代码是否需要考虑到这种情况?
作者: ygqiang    时间: 2011-12-29 15:45

  1. @echo off &setlocal enabledelayedexpansion
  2. Title 局域网空闲IP查询
  3. Rem '/*========获取本机的IP地址(局域网)=========*/
  4. echo 正在获取本机的IP地址,请稍等...
  5. for /f "tokens=3 skip=2 delims=: " %%i in ('nbtstat -n') do (
  6. set "IP_addr=%%i"
  7. set IP_addr=!IP_addr:~1,-1!
  8. echo 本机IP为:!IP_addr!
  9. goto :next
  10. )
  11. :next
  12. for /f "delims=. tokens=1,2,3,4" %%i in ("%IP_addr%") do set IP_fd=%%i.%%j.%%k
  13. Rem '/*========获取计算机名============*/
  14. echo.&echo 正在获取局域网内计算机名,请稍等...
  15. echo 处于网段 %IP_fd%.* 的计算机有:&echo.
  16. for /f "delims=" %%i in ('net view') do (
  17. set "var=%%i"
  18. rem ----------获取计算机名称------------
  19. if "!var:~0,2!"=="\\" (
  20. set "var=!var:~2!"
  21. echo !var!
  22. Rem ----------ping计算机名--------------
  23. ping -n 1 !var!>nul
  24. )
  25. )
  26. echo.&echo -----------------------------
  27. Rem '/*========提取arp缓存=========*/
  28. echo.&echo 正在获取局域网内计算机IP,请稍等...& echo.
  29. for /f "skip=3 tokens=1,* delims= " %%i in ('arp -a') do echo IP: %%i 已经使用
  30. echo.&echo -----------------------------
  31. echo 程序完成,谢谢使用!@Wenguolin.Com
  32. pause>nul
复制代码
网上找到的这个bat代码,可以获取本地局域网内的计算机名。
作者: awk    时间: 2011-12-29 15:57

你一般通过哪个名来查看IP地址对应的计算机名?
作者: ygqiang    时间: 2011-12-29 16:41

能否将2楼与1楼的代码,合并在一起呢?

这样应该就可以满足我的需求了吧?
作者: ygqiang    时间: 2011-12-29 23:15

顶。请帮忙解决下问题,谢谢
作者: ygqiang    时间: 2011-12-30 08:43

顶。下。。。
作者: hacker85    时间: 2011-12-30 14:12

顶一下,请版主或者是高手们看看,我觉得这种问题其实挺有用的,因为我也问过类似的问题,虽然解决方法不一样,效果也不是完全满意,但是我还是关注这方面的问题,希望针对局域网中的这个ip在线的问题有个相对完备的方案和程序。

winxp是一种环境,现在还有一种环境是win7.

注:当然还有linux,不过貌似超出了批处理的范围,那就需要使用shell了,呵呵。
作者: hacker85    时间: 2011-12-30 14:13

顶一下,请版主或者是高手们看看,我觉得这种问题其实挺有用的,因为我也问过类似的问题,虽然解决方法不一样,效果也不是完全满意,但是我还是关注这方面的问题,希望针对局域网中的这个ip在线的问题有个相对完备的方案和程序。

winxp是一种环境,现在还有一种环境是win7.

注:当然还有linux,不过貌似超出了批处理的范围,那就需要使用shell了,呵呵。
作者: awk    时间: 2011-12-30 14:40

回复 8# hacker85


找到IP之后,nslookup一下不行吗?
作者: yyykkkyyyy    时间: 2011-12-30 14:53

回复 7# hacker85


    呵呵你有这需求,自己赶紧补学批处理,应该不难,指望别人总是不方便的。我这帮你整了个在xp环境用的
  1. @echo off&title 局域网检测
  2. set ff=list.txt
  3. Rem    =======获取本机的IP地址========
  4. echo;
  5. for /f "tokens=1-6 delims=.: " %%a in ('ipconfig^|find ". . ."')do (
  6.    set %%a_%%b=%%c.%%d.%%e.%%f
  7.    if /i "%%a"=="ip" set ipd=%%c.%%d.%%e)
  8. echo 本机 IP  %ip_address%
  9. echo 子网掩码 %Subnet_Mask%
  10. echo 网   关  %default_gateway%
  11. set ip%default_gateway%=y
  12. set/a n1=0,n2=0
  13. echo.&echo 正在搜索 %ipd%.* 网段在线计算机 ...
  14. setlocal enabledelayedexpansion
  15. (echo;%date:~,10% %time% 在线计算机:&echo;
  16. echo  计算机名                 IP
  17. echo ==================================
  18. for /f "delims=\" %%i in ('net view^|find "\\"')do (
  19.   set "var=%%i                    "
  20.   set ip%%i=y
  21.   for /f "tokens=3 delims=: " %%j in ('ping -n 1 %%i^|find/i "Reply from"'
  22.     )do (echo !var:~,20!%%j&echo !var:~,20!%%j>con&set/a n1+=1))
  23. echo ==================================
  24. echo   共有 !n1! 个在线&echo;
  25. echo 以下 IP 离线:&(echo;&echo 离线 IP:&echo;)>con
  26. echo ==============
  27. for /L %%i in (1,1,254)do if not defined ip%ipd%.%%i (
  28.   set/a n2+=1
  29.   echo;%ipd%.%%i&echo;%ipd%.%%i>con)
  30. echo ==============
  31. echo !n2! 个离线)>"%ff%"
  32. echo;&echo %n2% 个离线
  33. endlocal
  34. echo;&set/p= 检测完成,按任意键退出... <nul&pause>nul
复制代码

作者: awk    时间: 2011-12-30 16:00

回复 10# yyykkkyyyy


我看,依楼主的态度是学不会了,你给写再多的代码他也不会尝试去理解。
作者: ygqiang    时间: 2011-12-30 18:11

多谢10楼朋友。

经过测试,可以正常运行。非常感谢




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