Невозможно установить переменные внутри для цикла с отложенным расширением - PullRequest
0 голосов
/ 22 апреля 2019

Код проходит по подпапкам (q1, q2 и т. Д.) В каталоге. Для каждой подпапки есть еще один цикл для для установки нескольких переменных. Я повторил несколько раз. Первый цикл для работает нормально, я вижу, что он проходит через каждую подпапку. Проблема в том, что код только устанавливает переменные в последней подпапке, скажем, 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 и т. Д.

1 Ответ

2 голосов
/ 22 апреля 2019

Вы включили отложенное расширение, но не используете его. Чтобы использовать переменную с отложенным расширением, вам нужно использовать ! вместо %.

Также для переменных цикла внутри скриптов необходимо two % s.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...