无法在for循环内设置具有延迟扩展的变量

时间:2019-04-22 03:13:30

标签: batch-file cmd

代码循环遍历目录下的子文件夹(q1q2等)。对于每个子文件夹,都有另一个 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.datq2子文件夹,COM_DATA=q2.dat等中。 com_vcom_M的名称与q1q2等相同。

1 个答案:

答案 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