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

Comparison of string with array in loop

我正在尝试列出连接到无线网络的无法识别的设备。我正在尝试比较那些基于 MAC 地址的设备(假设所有设备都是 'visible' 并且没有人有隐藏或跳动的 MAC 地址)并且我在一个数组中设置了这些设备是允许的。

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

这为我提供了连接到默认网关的所有 MAC 地址的列表。将上面的输出与 "acceptable" 的输出进行比较并显示不是

的输出的最简单方法是什么?

这是我已经达到的程度:

@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" 应包含所有已连接设备的列表。我能找出重复的,但不能找出未经授权或预期的。

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

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)
   )