循环中字符串与数组的比较
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)
)
我正在尝试列出连接到无线网络的无法识别的设备。我正在尝试比较那些基于 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)
)