Я разместил весь код ниже, но настоящее мясо здесь:
:: set counter
set c=0
for /f "delims=|" %%i in (%1) do (
:: increment counter for each line read
set /a c=!c!+1
if !c! leq %3 echo %%i >> %2
)
Обычно вы устанавливаете переменную счетчика c равной 0, а затем увеличиваете ее для каждой строки, считываемой из текстового файла. Вы проверяете счетчик по максимуму строк и выводите его в выходной файл, если он меньше или равен.
"delims=|"
Параметр в цикле for не позволяет разбивать строку на токены с пробелами и выводить только частичную строку. Необычное !c!
Переменная - это способ ссылки на переменные, которые используют отложенное расширение. Если вы просто используете %c%
, значение внутри цикла for
никогда не изменится.
Вы предоставляете сценарию три параметра: входной файл, выходной файл и количество строк для вывода. % 1,% 2 и% 3 представляют каждый из этих входных параметров в сценарии.
@echo off
REM ======================================================================
REM
REM NAME:
REM
REM AUTHOR: Scott McKinney
REM DATE :
REM
REM PURPOSE:
REM COMMENT:
REM DEPENDENCIES:
REM
REM Revisions:
REM
REM ======================================================================
setlocal ENABLEEXTENSIONS
setlocal ENABLEDELAYEDEXPANSION
set a=%1
if "%1"=="" goto HELP
if "%a:~0,2%"=="/?" goto HELP
if "%a:~0,2%"=="-?" goto HELP
if "%a:~0,2%"=="/h" goto HELP
if "%a:~0,2%"=="/H" goto HELP
if "%a:~0,2%"=="-h" goto HELP
if "%a:~0,2%"=="-H" goto HELP
if "%a:~0,3%"=="--h" goto HELP
if "%a:~0,3%"=="--H" goto HELP
:: set counter
set c=0
for /f "delims=|" %%i in (%1) do (
:: increment counter for each line read
set /a c=!c!+1
if !c! leq %3 echo %%i >> %2
)
goto END
:HELP
echo.
echo Usage: %0 ^<input file^> ^<output file^> ^<n lines^>
echo.
echo. Outputs the first ^<n^> lines from ^<input file^> to ^<output file^>.
echo.
:END