我正在尝试制作一个脚本来查找用户的组成员身份,然后检查每个组以查看是否存在特定组。为了简单起见,我使用字母表字母制作了一个测试脚本。我设置了一个名为 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),但希望尽可能尝试并坚持使用专门的批处理。有什么建议吗?
尝试
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 出现在字符串中,那么您使用的替换方法将 改变 字符串,因此您的测试将被逆转。