Как я увеличиваю переменную DOS в ДЛЯ/F цикла?

Я пытаюсь считать текстовые строки из файла и увеличить счетчик, таким образом, я могу в конечном счете моделировать массив в 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

45
задан Mike 26 May 2010 в 13:13
поделиться

1 ответ

Проблема в вашем фрагменте кода заключается в способе расширения переменных. Расширение переменных обычно выполняется при первом чтении оператора. В вашем случае читается весь цикл 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
82
ответ дан 26 November 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: