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

代码解释

  1. color命令设置控制台前景/背景色:背景黑色、前景绿色;
  2. title命令设置控制台标题;
  3. setlocal enabledelayedexpansion开启了变量延时绑定
  4. 第一个for循环用于获取本机IPv4地址,注意for循环中使用管道符号需要转义:^|
  5. 第二个for循环用于获取本机网段;
  6. 第三个for循环对net view命令的结果进行处理,对检测出来的所有主机发送一个ping报文,以便形成arp记录
  7. 查看arp地址解析表;

结果

总结

  1. 通过for循环获取命令的结果,使用单引号包含命令
  2. 通过for循环处理字符串,需要使用双引号
  3. net view命令和arp命令的使用;
  4. BAT字符串处理--字符串截取、替换等;

猜你喜欢

转载自blog.csdn.net/zhaogang1993/article/details/89818453