循环中字符串与数组的比较

时间:2016-10-08 22:38:14

标签: arrays string batch-file cmd string-comparison

我正在尝试提供连接到无线网络的未识别设备列表。我试图比较基于MAC地址的那些(假设所有设备都是“可见的”,并且没有人有隐藏或弹跳的MAC地址),并且我在阵列中设置了允许的那些设备。

nmap -sn 192.168.1.0/24 ^| find "MAC Address"

这为我提供了连接到默认网关的所有MAC地址的列表。将上述输出与“可接受”的输出进行比较并显示非输出的最简单方法是什么。

这是我到达了多远:

@echo off
set all_apps="xx:xx:xx:xx:xx:xx" "yy:yy:yy:yy:yy:yy" "zz:zz:zz:zz:zz:zz"
set "connected="
set "unauthorized="
for /f "tokens=3" %%a in ('nmap -sn 192.168.1.0/24 ^| find "MAC Address"') do call set connected="%%a" %%connected%%

echo duplicates:
   for %%a in (%all_apps%) do (
      for %%b in (%connected%) do (
         if "%%~a"=="%%~b" echo %%~b
      )
   )
pause

REM echo %connected% "xx:xx:xx:xx:xx:xx" "aa:aa:aa:aa:aa:aa"

此处“all_apps”是所有可接受的MAC地址的数组,“connected”应包含所有连接设备的列表。我能够找到重复的,但不能找到未经授权或预期的那些。

1 个答案:

答案 0 :(得分:0)

您只需要更多逻辑来查看地址何时不在列表中。这是未经测试的,但它可能看起来像:

SETLOCAL ENABLEDELAYEDEXPANSION

echo duplicates:
   for %%a in (%all_apps%) do (
      SET "FOUND=false"
      for %%b in (%connected%) do (
         if "%%~a"=="%%~b" echo %%~b
         SET "FOUND=true"
      )
      IF !FOUND! NEQ "true" (ECHO %%~b NOT RECOGNIZED)
   )