Batch file 脚本-延迟扩展-在for循环之外

Batch file 脚本-延迟扩展-在for循环之外,batch-file,scripting,dos,delayedvariableexpansion,Batch File,Scripting,Dos,Delayedvariableexpansion,我试图使用For循环之外的变量。环路内的回声给出了预期的结果。当我在循环外回显变量时,它不起作用。下面是脚本- 'SETLOCAL ENABLEDELAYEDEXPANSION SET x=0 FOR /f "tokens=*" %%a in ('dir "%InPath%*_Out.txt" /b') DO ( SET /a x+=1& SET /a cnt+=1& SET Fname%x%=%%a& SET FDate%x%=!Fname%x%:~0,8! ECHO

我试图使用For循环之外的变量。环路内的回声给出了预期的结果。当我在循环外回显变量时,它不起作用。下面是脚本-

'SETLOCAL ENABLEDELAYEDEXPANSION
SET x=0
FOR /f "tokens=*" %%a in ('dir "%InPath%*_Out.txt" /b') DO (
SET /a x+=1& SET /a cnt+=1& SET Fname%x%=%%a& SET FDate%x%=!Fname%x%:~0,8!
ECHO %x% !cnt! !Fname%x%! !Date%x%!
)

set z=3
ECHO !FDate%z%! `

你在这里看到的是一个糟糕的解释。
for
循环不起作用(取决于您在
for
循环之外尝试执行的操作)

这个

在循环内执行。在
x
变量上没有延迟扩展,因此,在
for
循环中,变量值的更改不可见,所有迭代都按如下方式执行

Fname0=%%a
SET FDate0=!Fname0:~0,8!
因此,您声称
for
循环中的代码起作用是不正确的。由于不工作,因此的
之外的代码将无法正常工作

你需要像这样的东西

FOR /f "tokens=*" %%a in ('dir "%InPath%*_Out.txt" /b') DO (
    SET /a x+=1
    SET /a cnt+=1
    SET "Fname!x!=%%a"
    for %%b in (!x!) do (
        SET "FDate!x!=!Fname%%b:~0,8!"
        ECHO !x! !cnt! !Fname%%b! !FDate%%b!
    )
)

这将正确地填充“数组”,使
for
循环之外的代码能够工作

因此-例程显示了什么,您看到了什么结果,以及您期望的结果是什么?有关批处理文件中数组管理的完整详细信息,请参阅:
FOR /f "tokens=*" %%a in ('dir "%InPath%*_Out.txt" /b') DO (
    SET /a x+=1
    SET /a cnt+=1
    SET "Fname!x!=%%a"
    for %%b in (!x!) do (
        SET "FDate!x!=!Fname%%b:~0,8!"
        ECHO !x! !cnt! !Fname%%b! !FDate%%b!
    )
)