脚本 - delayedexpansion - 在for循环之外

时间:2014-06-20 07:18:45

标签: 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 %x% !cnt! !Fname%x%! !Date%x%!
)

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

1 个答案:

答案 0 :(得分:1)

你在这里看到的是对你看到的不好的解释。 for循环不起作用(根据您在for循环之外的操作确定)。

这个

Fname%x%=%%a
SET FDate%x%=!Fname%x%:~0,8!

在循环内执行。 x变量没有延迟扩展,因此,变量值的变化在for循环内不可见,所有迭代都以

执行
Fname0=%%a
SET FDate0=!Fname0:~0,8!

因此,您声称for循环中的代码不正确。由于它不起作用,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循环外的代码可以正常工作