Batch file 脚本-延迟扩展-在for循环之外
我试图使用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
'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!
)
)