在批量迭代数组时如何引用当前索引?

时间:2017-10-09 22:35:32

标签: batch-file

当我尝试使用for each方法迭代文件夹时,我无法访问当前索引,而且我也无法手动保留一个:

@echo off

set "i=0"
set folders='dir /b /ad'
for /f "eol=: delims=" %%D in (%folders%) do (
    :: echo %%D
    echo %i%
    set /a "i+=1"
)

当我尝试使用基于this example的fori方法进行迭代时,我甚至无法使其工作:

@echo off
cls

set "i=0"
:SymLoop
set folders='dir /b /ad'
if defined folders[%i%] (
    echo %%folders[%i%]%%
    set /a "i+=1"
    GOTO :SymLoop
)

我意识到自己对这个主题完全缺乏了解,所以我很欣赏任何纠​​正和/或建议。

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
@echo off

set /a i=0
set folders='dir /b /ad'
for /f "eol=: delims=" %%D in (%folders%) do (
    REM echo %%D
    CALL echo %%i%%
    CALL SET "folders[%%i%%]=%%D"
    set /a i+=1

)
SET fol

ECHO ---------------------------

@echo off

set /a i=0
:SymLoop
set folders='dir /b /ad'
if defined folders[%i%] (
    CALL echo %%folders[%i%]%%
    set /a "i+=1"
    GOTO SymLoop
)


GOTO :EOF

请参阅有关delayed expansion的SO的无数示例,以获得更简单的方法。

::-comments中使用(code block)不是一个好主意,因为它可以打破阻止。

set /a通常不需要"报价"