Предполагая, что вы имеете в виду интерпретатор Windows cmd
(я был бы удивлен, если бы вы действительно все еще использовали DOS), следующий скрипт будет делать то, что вы хотите:
@echo off
setlocal enableextensions enabledelayedexpansion
set first=1
for /f "delims=" %%i in (infile.txt) do (
if !first!==1 echo %%i
set first=0
)
endlocal
С входным файлом infile.txt
как:
line 1
line 2
line 3
это выдаст:
line 1
Это все равно будет обрабатывать все строки, оно просто не будет печатать те, которые находятся за строкой 1. Если вы действительно хотите остановить обработку, используйте что-то вроде:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "delims=" %%i in (infile.txt) do (
echo %%i
goto :endfor
)
:endfor
endlocal
Или вы можете просто взять в свои руки Cygwin или GnuWin32 и использовать программу head
. Это то, что я бы сделал. Но, если это не вариант (некоторые рабочие места не позволяют этого), вы можете создать аналогичный cmd-файл в самой Windows следующим образом (winhead.cmd
):
@echo off
setlocal enableextensions enabledelayedexpansion
if x%1x==xx goto :usage
if x%2x==xx goto :usage
set /a "linenum = 0"
for /f "usebackq delims=" %%i in (%1) do (
if !linenum! geq %2 goto :break1
echo %%i
set /a "linenum = linenum + 1"
)
:break1
endlocal
goto :finish
:usage
echo.winhead ^<file^> ^<numlines^>
echo. ^<file^>
echo. is the file to process
echo. (surround with double quotes if it contains spaces).
echo. ^<numlines^>
echo. is the number of lines to print from file start.
goto :finish
:finish
endlocal