4

У меня есть текстовый файл A.txt

Pinging [xx.xx.xx.xx] with 32 bytes of data:

Request timed out.

Ping statistics for xx.xx.xx.xx:
Packets: Sent = 1, Received = 0, Lost = 1 (100% loss)

Я хотел бы скопировать первые 2 строки этого файла в другой файл B.txt, т.е.

Pinging [xx.xx.xx.xx] with 32 bytes of data:
Request timed out.

Я знаю, что могу использовать FOR /F для циклического прохождения строк в файле. Я знаю, как пропустить первые две строки, но не только читать их. Я также попытался сделать это, используя FOR /F с командой DO ECHO и связанной с ней командой FIND, а также прямую команду FINDSTR (в обоих случаях ища "Pinging" и "Request"), но я не могу заставить их работать должным образом.

1 ответ1

6

Я разместил весь код ниже, но настоящее мясо здесь:

:: 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .