总体目标是我想编写一个批处理脚本,我可以传递两个参数 - 一个AD组,以及一个包含用户列表的文本文件的位置。完成的数据将被传递到另一个系统中的API以导入以管理其他组,如邮件列表等。
困难在于:我希望将数组值与批处理脚本中的数字变量进行比较,而不使用延迟扩展,最好是。
这将允许我创建一个“气泡比较”,我可以根据现有文件中已有的值检查每个新条目,然后将条目附加到主列表,或者如果它已经存在则不执行任何操作。< / p>
我试图在不使用延迟扩展的情况下执行此操作。在我看来,如果不延迟扩展,也许不能以这种方式使用数组。是否可以在不利用延迟扩展的情况下比较递增的数组值?
FOR /L %%a IN (0,1,9) DO (
CALL SET numbers[%%a%%]=%%a
)
SET /A i=0
:startLoop
IF "%numbers[%i%]%" EQU "%i%" DO (
ECHO "%i% exists!"
set /A i=%i%+1
GOTO startLoop
)
ELSE ( ECHO "The list has finished at %i%")
答案 0 :(得分:2)
您的代码中存在一些问题:
call set numbers[%%a%%]=%%a
应该阅读set "numbers[%%a]=%%a"
(此处不需要call
); do
条款中没有if
; if "%numbers[%i%]%" equ "%i%"
尝试展开(不存在的)变量numbers[
和]
; call if "%%numbers[%i%]%%" equ "%i%"
不起作用call
无法与if
一起使用;但你可以call set "interim=%%numbers[%i%]%%"
然后if "%interim%" equ "%i%"
; set /A i=%i%+1
应阅读set /A "i+=1"
; ) else (
必须在一行中; 总而言之,这意味着:
for /L %%a in (0,1,9) do (
set "numbers[%%a]=%%a"
)
set /A "i=0"
:startLoop
call set "interim=%%numbers[%i%]%%"
if "%interim%" equ "%i%" (
echo %i% exists
set /A "i+=1"
goto :startLoop
) else (
echo The list has finished at %i%
)