DarkDream604, переменная %V%, не является переменной цикла, поэтому ее раскрытие произойдет не во время выполнения тела цикла , а до него, и только один раз. Первый вывод на экран показывает, что при отработке тела цикла создается переменная %V%, но значение ее пусто, так как раскрытие уже произошло. Но при выполнении цикла переменная %V% меняет свое значение, по окончании которого оно равно 7. Это подтверждает второй вывод на экран, где опять же %V% раскрывается один раз. Чтобы переменная %V% раскрывалась во время выполнения цикла нужно включить режим отложенного раскрытия переменных, как это сделал
sov44, написав строку SetLocal enabledelayedexpansion. В таком режиме символы процента для переменной, раскрытие которой нужно отложить, меняется на восклицательный знак. Режим можно и не включать, а использовать трюк с оператором CALL:
Код:

@Echo Off
SetLocal
FOR /L %%I In (0#,1#,7#) Do (
Set V=%%I
Call Echo:V=%%V%% I=%%I
)
Обратите внимание на выделенное красным. Я удвоил символы процента в имени переменной для того, чтобы раскрытие произошло 2 раза - первый раз интерпретатором перед выполнением, когда раскрывается все, что можно раскрыть (cимвол процента экранируется самим собою, поэтому при первом раскрытии от %%V%% останется только %V%), второй раз интерпретатором при выполнении команды CALL, которая на вход получит строку Echo:V=%V% I=тут уже будет какое-то значение.