如何循环遍历数组来检查每个值以查看批次中是否存在特定值

问题描述 投票:0回答:1

我正在尝试制作一个脚本来查找用户的组成员身份,然后检查每个组以查看是否存在特定组。为了简单起见,我使用字母表字母制作了一个测试脚本。我设置了一个名为 Alphabet 的数组,其中包含字母 A-G 作为值:

SET Alphabet=A,B,C,D,E,F,G

然后,我设置另一个名为 Letters 的变量,这是我想要搜索 Alphabet 数组以查看它们是否存在的值(我添加了 2 个数字作为测试值,以确认它们不会在循环中找到):

SET Letters=A,4,D,8

这是我到目前为止所拥有的(在循环中使用字符串替换来查找值):

@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET Alphabet=A,B,C,D,E,F,G
SET Letters=A,4,D,8

SET n=1
SET "MyLetter[!n!]=%Letters:,=" & SET /A n+=1 & SET "MyLetter[!n!]=%"
FOR /L %%i in (1,1,!n!) DO (
    IF "x!Alphabet:MyLetter[%%i]=!"=="x!Alphabet!" (ECHO !MyLetter[%%i]! is present) ELSE (ECHO !MyLetter[%%i]! is NOT present)
    )
ENDLOCAL

我希望脚本输出以下内容:

A is present
4 is NOT present
D is present
8 is NOT present

运行脚本时,输出如下:

A is present
4 is present
D is present
8 is present

由于某种原因,它检测到 Alphabet 数组中存在字母数组值 4 和 8。我相信这可能是我的循环的问题,但我不确定我做错了什么。我希望这不是批处理的限制(但如果是的话,我想我可能不得不求助于调用 Powershell),但希望尽可能尝试并坚持使用专门的批处理。有什么建议吗?

arrays batch-file cmd
1个回答
0
投票

尝试

FOR %%i in (%letters%) DO (
    IF "x!Alphabet:%%i=!"=="x!Alphabet!" (ECHO %%i is NOT present) ELSE (ECHO %%i is present)
    )

原因在于

IF "x!Alphabet:MyLetter[%%i]=!"=="x!Alphabet!" (ECHO !MyLetter[%%i]! is present) ELSE (ECHO !MyLetter[%%i]! is NOT present)

您需要替换 MyLetter[%%i]

CONTENTS
,而不是 STRING
MyLetter[%%i]

另请注意,如果候选者 IS 出现在字符串中,那么您使用的替换方法将 改变 字符串,因此您的测试将被逆转。

© www.soinside.com 2019 - 2024. All rights reserved.