windows bat系列12:获取主机局域网所有设备
背景
开发人员常常需要使用windows系统管理众多的Linux服务器。就本人而言,因偶尔更换办公地点,导致路由器每次为Linux主机分配的IP不尽相同。因而,需要探测主机局域网内所有设备IP。
代码
COLOR 0A
CLS
@ECHO Off
Title 查询局域网内在线电脑IP
@ECHO off
setlocal enabledelayedexpansion
ECHO 正在获取本机的IP地址,请稍等...
for /f "delims=: tokens=2" %%i in ('ipconfig ^| find /i "IPv4"') do set ip=%%i
echo %ip%
for /f "delims=. tokens=1,2,3,4" %%i in ("%IP%") do set range=%%i.%%j.%%k
ECHO.&ECHO 正在获取本网段内的其它在线计算机名,请稍等...
ECHO 本网段【%range%.*】内的计算机有:
for /f "delims=" %%i in ('net view') do (
set "var=%%i"
::查询在线计算机名称
if "!var:~0,2!"=="\\" (
set "var=!var:~2!"
ECHO !var!
::发送一个ping报文
ping -n 1 !var!>nul
)
)
ECHO.
ECHO 正在获取本网段内的其它在线计算机IP,请稍等...
for /f "skip=3 tokens=1,* delims= " %%i in ('arp -a') do ECHO IP: %%i 正在使用
ECHO.
ECHO 查询完毕,按任意键退出...
pause>nul
代码解释
- color命令设置控制台前景/背景色:背景黑色、前景绿色;
- title命令设置控制台标题;
- setlocal enabledelayedexpansion开启了变量延时绑定;
- 第一个for循环用于获取本机IPv4地址,注意for循环中使用管道符号需要转义:^|;
- 第二个for循环用于获取本机网段;
- 第三个for循环对net view命令的结果进行处理,对检测出来的所有主机发送一个ping报文,以便形成arp记录;
- 查看arp地址解析表;
结果
总结
- 通过for循环获取命令的结果,使用单引号包含命令;
- 通过for循环处理字符串,需要使用双引号。
- net view命令和arp命令的使用;
- BAT字符串处理--字符串截取、替换等;