我试图在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%! `
答案 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
循环外的代码可以正常工作