批处理文件:访问for循环中的数组元素

时间:2014-06-16 17:37:38

标签: arrays batch-file

我对如何从Windows批处理文件中的for循环内访问数组值感到困惑。这是我的测试:

@ echo off
SET ROOT=c:\temp\test

REM set up array of local dir paths
SET LDIR[1]=data
SET LDIR[2]=data\fonts
SET LDIR[3]=data\images

for /L %%s in (1,1,3) do (
  IF EXIST %ROOT%\%%LDIR[%%s]%% (
    call echo %ROOT%\%%LDIR[%%s]%% exists
  ) else (
    call echo %ROOT%\%%LDIR[%%s]%% does not exist
  )
)

我得到输出:

c:\temp\test\data does not exist
c:\temp\test\data\fonts does not exist
c:\temp\test\data\images does not exist

即使dirs存在。我相信数组在IF EXISTS语句中没有正确地去掉。这样做的正确方法是什么?另外为什么有必要使用" call"让数组正确解除引用? --Thanks!

1 个答案:

答案 0 :(得分:1)

@ echo off
SET ROOT=c:\temp\test

REM set up array of local dir paths
SET LDIR[1]=data
SET LDIR[2]=data\fonts
SET LDIR[3]=data\images
setLocal enableDelayedExpansion
for /L %%s in (1,1,3) do (
  IF EXIST %ROOT%\!LDIR[%%s]! (
    echo %ROOT%\!LDIR[%%s]! exists
  ) else (
    echo %ROOT%\!LDIR[%%s]! does not exist
  )
)
endLocal

问题是你需要打电话" if与你的ECHO es相同,但IF命令不能与CALL一起使用,所以你的最后希望是延迟扩展。这样你的表现也会提升,因为不需要{ {1}}