我正在尝试检查数组中的文件是否存在。数组和循环工作正常,但if exists
- 行给出了语法错误。我尝试了不同的变体(%%list[%x%]%%
,list[%x%]
,%%list[%%x%%]%%
),但它们都不起作用。
问题:为什么if exists %%list[%x%]%%
无效,call echo Check file: %%list[%x%]%%
有效?
提示:我使用这种“循环”,因为如果数组的大小发生变化,我希望不要更改编码。
set list[0]="C:\file_a.txt"
set list[1]="C:\file_b.txt"
set list[2]="C:\file_c.txt"
set "found=0"
set "notfound=0"
set "x=0"
:SymLoop
if defined list[%x%] (
call echo Check file: %%list[%x%]%%
if exists %%list[%x%]%% (
set /a "found+=1"
) else (
set /a "notfound+=1"
)
set /a "x+=1"
GOTO :SymLoop
)
echo %found%/%x% file found. %notfound% files missing!
PAUSE
解决:问题是缺少“延迟扩展”,另外还有一个错字(存在而不是存在)。
答案 0 :(得分:1)
尝试这样:
setlocal EnableDelayedExpansion
set list[0]="C:\file_a.txt"
set list[1]="C:\file_b.txt"
set list[2]="C:\file_c.txt"
set "found=0"
set "notfound=0"
set "x=0"
:SymLoop
if defined list[%x%] (
echo Check file: !list[%x%]!
if exist !list[%x%]! (
set /a "found+=1"
) else (
set /a "notfound+=1"
)
set /a "x+=1"
GOTO :SymLoop
)
echo %found%/%x% file found. %notfound% files missing!
PAUSE