代码循环遍历目录下的子文件夹(q1
,q2
等)。对于每个子文件夹,都有另一个 for 循环来设置多个变量。我回声了好几次。第一个 for 循环工作正常,我可以看到它遍历了每个子文件夹。问题是代码仅在最后一个子文件夹中设置变量,例如q100
。现在,我将代码逐行放入cmd中。
我尝试了setlocal ENABLEDELAYEDEXPANSION
。但是我看不到它起作用。我真诚地寻求帮助!
setlocal ENABLEDELAYEDEXPANSION
for /f %f in ('dir /ad /b ') do (
echo %f
pause
pushd %f
for /d "tokens=1,2 delims=:" %a in ('dir /b *.a*.dat in %f' ) do (
set COM_DATA=%a
echo %COM_DATA%
set COM_V=%f\com-v.dat
echo %COM_V%
set COM_M=%f\com-M.dat
echo %COM_M%
)
chdir
popd
)
endlocal
我期望的输出在q1
子文件夹COM_DATA=q1.dat
,q2
子文件夹,COM_DATA=q2.dat
等中。
com_v
和com_M
的名称与q1
,q2
等相同。
答案 0 :(得分:2)
您已启用延迟扩展,但未使用它。要使用延迟扩展的变量,您需要使用!
而不是%
。
另外,对于脚本内部的循环变量,需要两个 %
。
setlocal ENABLEDELAYEDEXPANSION
for /f %%f in ('dir /ad /b ') do (
echo %%f
pause
pushd %%f
for /d "tokens=1,2 delims=:" %%a in ('dir /b *.a*.dat in %%f' ) do (
set COM_DATA=%%a
echo !COM_DATA!
set COM_V=%%f\com-v.dat
echo !COM_V!
set COM_M=%%f\com-M.dat
echo !COM_M!
)
chdir
popd
)
endlocal