Основная проблема заключается в том, что, помимо переменной цикла, cmd
расширяет переменные в цикле пакетного файла перед выполнением цикла, поэтому, хотя в цикле устанавливается A
, значение, которое отображается перед входом в цикл (т.е. пустой). Вы можете видеть, что значение было установлено, опуская set
перед окончательным echo
: результат будет таким же.
Ответ - включить отложенное расширение и использовать !A!
вместо %A%
.
Кстати, команды copy
и echo
в начале файла - это слишком долгий способ записи echo firstLine > %1
.
Таким образом, ваш пакетный файл будет работать как положено, если вы измените его следующим образом:-
@echo off
SetLocal EnableDelayedExpansion
rem copy NUL %1
rem echo firstLine >> %1
echo firstLine > %1
echo /=======================/
for /l %%x in (1,1,3) do (
echo %%x
set /p A=< %1
echo !A!
)
echo /=======================/
rem set /p A=< %1
echo %A%
Обратите внимание, что вы будете устанавливать A
в одно и то же значение на каждом проходе цикла. Вам нужно будет использовать другую технику, если вы хотите, чтобы каждый проход отображал последовательные строки из файла.