我对如何从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
即使存在迪尔斯。我相信在IF EXISTS语句中,数组未正确取消引用。正确的方法是什么?另外,为什么有必要使用“调用”来使数组正确地解除引用? - 谢谢!
@ 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
问题是您需要以与ECHO
es相同的方式“调用” if,但是IF命令不能与CALL一起使用,因此您的最后希望是延迟扩展。这样一来,由于不需要CALL
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句