Проблема с вашим фрагментом кода заключается в способе раскрытия переменных. Расширение переменной обычно выполняется при первом чтении оператора. В вашем случае весь цикл FOR
и его блок считываются, а все переменные, кроме переменных цикла, расширяются до их текущего значения.
Это означает, что %c%
в вашем echo %%i, %c%
мгновенно расширяется и поэтому фактически используется как echo %%i, 1
в каждой итерации цикла.
Так что вам нужно, это расширение отложенной переменной. Найдите хорошее объяснение по этому поводу здесь .
Переменные, которые должны быть расширены с задержкой, обозначаются !VARIABLE!
вместо %VARIABLE%
. Но вам нужно активировать эту функцию с помощью setlocal ENABLEDELAYEDEXPANSION
и сбросить ее с соответствующим endlocal
.
Ваш модифицированный код будет выглядеть примерно так:
set TEXT_T="myfile.txt"
set /a c=1
setlocal ENABLEDELAYEDEXPANSION
FOR /F "tokens=1 usebackq" %%i in (%TEXT_T%) do (
set /a c=c+1
echo %%i, !c!
)
endlocal