(Не очень понятно, в чём состоит «открытие файла на чтение»: по моему, просто присваивается значение одной переменной другой.)
Вероятно, не хватает памяти для переменных окружения.
Можно не запоминать все строки, а прочитать три первых, вывести их в нужном порядке, а затем выводить строки, не запоминая их, в новый файл и удалить старый.
Первые три строки можно получить так:
(
set /p "s1="
set /p "s2="
set /p "s3="
) <input.txt
Вывести содержимое файла, начиная с четвёртой строки можно, например, с помощью утилиты
more
:
more +3 input.txt >>output.txt
или
more +3 <input.txt >>output.txt
А в целом:
(
set /p "s1="
set /p "s2="
set /p "s3="
echo !s3!
echo !s2!
echo !s1!
more
) <input.txt >output.txt
del input.txt
ren output.txt input.txt
В этом случае, возможно, вместо
more
для перехвата оставшихся строк будет лучше
find /v ""