Я пытаюсь считать текстовые строки из файла и увеличить счетчик, таким образом, я могу в конечном счете моделировать массив в DOS.
Я хотел бы смочь сохранить строки текста в массиве DOS для последующей обработки.
Моя текущая попытка:
set TEXT_T="myfile.txt"
set /a c=1
FOR /F "tokens=1 usebackq" %%i in (%TEXT_T%) do (
set /a c=c+1
echo %%i, %c%
)
Но переменная c не увеличивает; это остается в 1.
Приветствующиеся предложения.
Спасибо, Mike
Проблема в вашем фрагменте кода заключается в способе расширения переменных. Расширение переменных обычно выполняется при первом чтении оператора. В вашем случае читается весь цикл 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