标题: [网络连接] [已解决]批处理如何检测局域网在线计算机名与ip地址,并保存到txt文件中? [打印本页]
作者: ygqiang 时间: 2011-12-29 14:41 标题: [已解决]批处理如何检测局域网在线计算机名与ip地址,并保存到txt文件中?
本帖最后由 ygqiang 于 2011-12-30 18:11 编辑
- @echo off
-
- for /f "tokens=15 delims= " %%i in ('ipconfig ^| find /i "IP Address"') do (
- set fsip=%%i
- )
- echo %fsip%
- pause
-
-
- for /f "tokens=1,2,3 delims=." %%i in ("%fsip%") do (
- set a=%%i.%%j.%%k
- )
-
- set Gateway=%a%.1
- echo %a%
- pause
-
- del /f /q 在线ip.txt
- del /f /q 离线ip.txt
-
- for /l %%m in (1,1,254) do (
-
- ping.exe %a%.%%m -n 1 -w 300 >nul&&echo %a%.%%m>>在线ip.txt||echo %a%.%%m>>离线ip.txt
-
- )
- 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
- @echo off &setlocal enabledelayedexpansion
- Title 局域网空闲IP查询
- Rem '/*========获取本机的IP地址(局域网)=========*/
- echo 正在获取本机的IP地址,请稍等...
- for /f "tokens=3 skip=2 delims=: " %%i in ('nbtstat -n') do (
- set "IP_addr=%%i"
- set IP_addr=!IP_addr:~1,-1!
- echo 本机IP为:!IP_addr!
- goto :next
- )
- :next
- for /f "delims=. tokens=1,2,3,4" %%i in ("%IP_addr%") do set IP_fd=%%i.%%j.%%k
- Rem '/*========获取计算机名============*/
- echo.&echo 正在获取局域网内计算机名,请稍等...
- echo 处于网段 %IP_fd%.* 的计算机有:&echo.
- for /f "delims=" %%i in ('net view') do (
-
- set "var=%%i"
-
- rem ----------获取计算机名称------------
- if "!var:~0,2!"=="\\" (
- set "var=!var:~2!"
- echo !var!
- Rem ----------ping计算机名--------------
- ping -n 1 !var!>nul
- )
- )
- echo.&echo -----------------------------
- Rem '/*========提取arp缓存=========*/
- echo.&echo 正在获取局域网内计算机IP,请稍等...& echo.
-
- for /f "skip=3 tokens=1,* delims= " %%i in ('arp -a') do echo IP: %%i 已经使用
- echo.&echo -----------------------------
- echo 程序完成,谢谢使用!@Wenguolin.Com
- 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环境用的- @echo off&title 局域网检测
- set ff=list.txt
- Rem =======获取本机的IP地址========
- echo;
- for /f "tokens=1-6 delims=.: " %%a in ('ipconfig^|find ". . ."')do (
- set %%a_%%b=%%c.%%d.%%e.%%f
- if /i "%%a"=="ip" set ipd=%%c.%%d.%%e)
- echo 本机 IP %ip_address%
- echo 子网掩码 %Subnet_Mask%
- echo 网 关 %default_gateway%
- set ip%default_gateway%=y
- set/a n1=0,n2=0
- echo.&echo 正在搜索 %ipd%.* 网段在线计算机 ...
- setlocal enabledelayedexpansion
- (echo;%date:~,10% %time% 在线计算机:&echo;
- echo 计算机名 IP
- echo ==================================
- for /f "delims=\" %%i in ('net view^|find "\\"')do (
- set "var=%%i "
- set ip%%i=y
- for /f "tokens=3 delims=: " %%j in ('ping -n 1 %%i^|find/i "Reply from"'
- )do (echo !var:~,20!%%j&echo !var:~,20!%%j>con&set/a n1+=1))
- echo ==================================
- echo 共有 !n1! 个在线&echo;
- echo 以下 IP 离线:&(echo;&echo 离线 IP:&echo;)>con
- echo ==============
-
- for /L %%i in (1,1,254)do if not defined ip%ipd%.%%i (
- set/a n2+=1
- echo;%ipd%.%%i&echo;%ipd%.%%i>con)
- echo ==============
- echo !n2! 个离线)>"%ff%"
- echo;&echo %n2% 个离线
- endlocal
- echo;&set/p= 检测完成,按任意键退出... <nul&pause>nul
复制代码
作者: awk 时间: 2011-12-30 16:00
回复 10# yyykkkyyyy
我看,依楼主的态度是学不会了,你给写再多的代码他也不会尝试去理解。
作者: ygqiang 时间: 2011-12-30 18:11
多谢10楼朋友。
经过测试,可以正常运行。非常感谢
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |