标题: [注册表类] [已解决]批处理检测在线ip和计算机名。。并对比txt文件(计算机名和ip)列表。。 [打印本页]
作者: ygqiang 时间: 2015-7-14 08:23 标题: [已解决]批处理检测在线ip和计算机名。。并对比txt文件(计算机名和ip)列表。。
本帖最后由 ygqiang 于 2015-7-16 20:59 编辑
[已解决]批处理检测在线ip和计算机名。。并对比txt文件(计算机名和ip)列表。。
xp环境下的局域网,获取在线IP和对应的计算机名,对比,保存在txt文件里的ip、计算机名是否一致。。
下面这个bat代码,可以实现:
按照规则,ping某个ip。。ping通的话,获取到ip对应的计算机名。(ping不通,就继续ping下一个ip)
。。然后按照计算机名-ip的格式,保存到txt文件里。。。
我需要的功能是:
按照规则,先ping某个ip,如果ping通。。。就获取对应的计算机名a(ping不通,就继续ping下一个ip)
1、如果ip不在txt文件里面,就保存在新的txt文件里(格式是计算机名a-ip)
2、如果ip在txt文件里,就继续获取txt文件里ip对应的计算机名b。
2.1、计算机名也一致(a和b一样),就继续ping下一个ip
2.2、计算机名不一致(a和b不一样),也是保存在新的txt文件里(格式也是计算机名a-ip)
需要修改的bat代码如下:- @echo off
- setlocal enabledelayedexpansion
- set "aa= "
-
-
-
-
- ———————————————————————————————————————————————————————————————
- cls
- for /f "tokens=15 delims= " %%i in ('ipconfig ^| find /i "IP Address"') do (
- set fsip=%%i
- )
- echo %fsip%
-
- for /f "tokens=1,2,3 delims=." %%i in ("%fsip%") do (
- set a=%%i.%%j.%%k
- )
-
- echo %a%
-
- set Gateway=%a%.1
-
- ———————————————————————————————————————————————————————————————
- cls
-
- del /f /q 在线计算机名-ip.txt >nul 2>nul
-
- for /l %%m in (2,1,100) do (
- ping.exe %a%.%%m -n 1 -w 300 >nul&&Call :getname %a%.%%m
- )
-
-
- ———————————————————————————————————————————————————————————————
- cls
-
- start "" "在线计算机名-ip.txt"
- exit
-
-
-
-
- ———————————————————————————————————————————————————————————————
- cls
-
- :getname
- set iip=%1
- set nname=
- for /f "delims=" %%i in ('nbtstat -a !iip! ^| find /i "<00> UNIQUE"') do (
- echo %%i
- set tii=%%i
- for /f "tokens=1 delims=< " %%j in ("!tii!") do echo %%j!aa!!iip!>>在线计算机名-ip.txt
- goto :aa
- )
- for /f "delims=" %%j in ('nbtstat -a !iip! ^| find /i "Host not found"') do (
- echo %%j
- echo !iip!>>在线计算机名-ip.txt
- )
- :aa
复制代码
txt文件列表格式如下:- CB1 192.168.8.11
- CB2 192.168.8.12
- CB3 192.168.8.13
- CB4 192.168.8.14
- CB5 192.168.8.15
- CB6 192.168.8.16
- CB7 192.168.8.17
- CB8 192.168.8.7
- CB9 192.168.8.19
- CB10 192.168.8.20
- CB11 192.168.8.21
- CB12 192.168.8.22
- CB13 192.168.8.23
-
-
-
-
-
- ZWDD 192.168.8.33
- ZWJH1 192.168.8.31
- ZWJH2 192.168.8.32
-
- CBSbg1 192.168.8.38
- NYJH 192.168.8.40
- NYDD 192.168.8.42
-
-
-
- SKTSYLS 192.168.8.36
-
- gjsyls 192.168.8.35
-
- YSJH 192.168.8.41
- YSDD 192.168.8.39
-
- YB 192.168.8.37
- ZLCBS2 192.168.8.56
- zhs 192.168.8.43
- zhs1 192.168.8.44
-
-
-
-
- BZDD 192.168.8.77
复制代码
作者: ygqiang 时间: 2015-7-14 21:44
顶。。。。。。。。。
作者: ygqiang 时间: 2015-7-15 19:36
有人能帮忙解决下?谢谢。。
作者: ygqiang 时间: 2015-7-16 20:58
本帖最后由 ygqiang 于 2015-7-16 21:00 编辑
已经解决。。。- @echo off
- setlocal enabledelayedexpansion
- ::获取本机ip
- for /f "tokens=1* delims=:" %%a in ('ipconfig ^| find /i "IP Address"') do (
- ::获取本机ip前三段
- for /f "tokens=1,2,3 delims=. " %%c in ("%%b") do set tip=%%c.%%d.%%e
- )
- echo;本机ip前三段%tip%
-
- del /f /q ip-new.txt
-
-
- ::ping系列ip
- for /l %%a in (2,1,150) do (
- ::通的话调用getname
- echo;%tip%.%%a
- (ping %tip%.%%a -n 1 -w 300 | findstr /i "TTL=")&&Call :getname %tip%.%%a
- )
-
- exit
- pause&exit
-
-
- :getname
- ::获取ping通的ip对应的主机名
- for /f "tokens=1,* delims=^<" %%i in ('nbtstat -a %1^|find /i "<00> UNIQUE"') do (
- ::提取主机名
- set "newname=%%i"
- set "newname=!newname: =!"
- )
- echo;%1主机名!newname!
- ::查找Old_Name_IP.txt是否有该ip,有的话进行变量赋值
- set oldip=
- for /f "tokens=1*" %%m in ('findstr "%1\>" "ip-old.txt"') do (
- set oldname=%%m
- set oldip=%%n
- )
- echo;ip-old.txt是否存在!oldip!
-
- ::如果变量没有赋值,也就是Old_Name_IP.txt不存在该ip
-
- echo; "!newname!" "!oldname!"
- if not defined oldip (
- >>ip-new.txt echo;!newname! %1
- ) else (
- if "!newname!" neq "!oldname!" (>>ip-new.txt echo;!newname! %1 )
- )
-
-
- ::返回ping
- 1pause
-
- goto :eof
复制代码
作者: ygqiang 时间: 2015-7-16 21:51
参考思路:- @echo off
-
- setlocal enabledelayedexpansion
-
- echo,请输入你要查询的IP:
- set /p strIP=
- call :_CmpName !strIP! result
- echo,当前IP !strIP!,与保存记录查询结果为 : !result!
-
- pause
- goto :EOF
-
- :_CmpName
- (
- call :_GetNameByIP %1 strName
- echo,取得计算机名为 : !strName!
-
- call :_GetOldNameByIP %1 strOldName
- echo,保存计算机名为 : !strOldName!
-
- if "!strName!" EQU "!strOldName!" (set %2=一致) else (set %2=不一致)
-
- goto :EOF
- )
-
- :_GetNameByIP
- (
- REM echo,%%2 is : %2
- for /f "tokens=1,* delims=<" %%i in ('nbtstat -a %1^|findstr "<"') do (
- set "%2=%%i"
- set "%2=!%2: =!"
- goto :EOF
- )
- goto :EOF
- )
-
- :_GetOldNameByIP
- (
- REM echo,%%2 is : %2
- for /f "tokens=1,*" %%i in ('findstr "%1\>" 初始值.txt') do (
- set "%2=%%i"
- )
- goto :EOF
- )
复制代码
三个函数。
:_CmpName是主入口。
:_GetNameByIP是取得指定IP的计算机名。
:_GetOldNameByIP是取得保存文件里面的计算机名。
findstr /i IP 存储文件名 >nul && ()
把strIP改成你需要对比的IP就行。
下面几个函数基本上照抄。
先对比ip是否在txt文件里面存在。。存在的话,还要对比计算机名
只把GetOldNameByIP里面的对比文件改成真实的保存文件名就行了。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |