批处理:if块中的转义数组

时间:2017-12-01 08:00:16

标签: arrays batch-file cmd escaping

我正在尝试检查数组中的文件是否存在。数组和循环工作正常,但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

解决:问题是缺少“延迟扩展”,另外还有一个错字(存在而不是存在)。

1 个答案:

答案 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