Engraf а какие непонятки с set ? чтение set /? не помогло?
установить одну переменную в значение три и разопределить другую переменную если она случайно была определена ранее.
кавычки - чтоб со случайно затесывающимися в конец строк пробелами путаницы не было.
more ^< numbers.txt
в чем тут непонятнка? это more < numbers.txt с заэкранированной для for скобкой.
чем лучше чем
type numbers.txt в данном варианте - не знаю, но может тот numbers.txt - уникодный...
выход этой печати файла перехватывается циклом for /f "delims=" %%a
set /a i += 1
увеличить значение переменной i на единичку, читаем set /?
'echo/%%i%%'
это опять специфика исполняемой команды в for и порядка парсинга строк.
удвоение % нужно чтоб переменная %i% НЕ была заменена на значение в момент парсинга команды for /f "delims=" %%a in. с такими удвоенными процентами - в тот момент команда вложенного цикла станет ('echo/%i%') и %i% заменится на значение счетчика только в тот момент когда вызовется выполнение цикла.
причем символ / - в такой позиции строки не печатается, но его наличие в той позиции не-пробела приводит к печати пустрой строки в случае пустого значения %i%, тут такого не бывает - просто у автора правильная привычка, я тоже стараюсь писать echo
.%var% даже если та var определяется строкой выше (не говоря о более неопределенных случаях)
Добавлено: в целом батник делает:
на каждую непустую строку numbers.txt цикл производит:
инкремент %i%
после чего извращенным вложенным циклом делается сравнение,
при достижении %i% значения 3 (т.е. на 4й строке numbers.txt) устанавливается переменная ок.
последняя строка - печатает тукущую строку numbers.txt если ок не определена,
т.е. от всего numbers.txt цикл печатает три первых строки, что и обещали.
в общем и целом - пример как можно извратиться но не нужно делать
Код: @echo off
setlocal enabledelayedexpansion
set lines=3
set i=0
for /f "delims=" %%a in ('more ^< numbers.txt ') do (
set /a i += 1
if !i! leq %lines% echo.%%a
)