Batch Arquivo que copia as primeiras 2 linhas de um arquivo de texto em outro arquivo de texto

4

Eu tenho um arquivo de texto 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)

Eu gostaria de copiar as duas primeiras linhas deste arquivo para outro arquivo B.txt, ou seja,

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

Eu sei que posso usar FOR / F para percorrer as linhas no arquivo. Eu sei pular as duas primeiras linhas, mas não apenas lê-las. Eu também tentei fazer isso usando FOR / F com DO ECHO e o comando FIND relacionado e também um comando FINDSTR direto (em ambos os casos, pesquisando por "Pinging" e "Request"), mas não consigo trabalhar adequadamente.

    
por SC. 12.07.2011 / 05:12

1 resposta

6

Eu postei o código inteiro abaixo, mas a carne real está aqui:

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

Basicamente, você define a variável do contador c como 0 e, em seguida, incrementa-a para cada linha lida do arquivo de texto. Você testa o contador em relação às linhas máximas e as ecoa no arquivo de saída se for menor ou igual.

O parâmetro "delims=|" no loop for impede que ele quebre a linha em tokens em caracteres de espaço e, portanto, apenas em uma linha parcial. A variável !c! incomum é como referenciar as variáveis que estão usando a expansão atrasada. Se você usou apenas %c% , o valor nunca mudaria dentro do loop for .

Você fornece o script com três parâmetros: arquivo de entrada, arquivo de saída e número de linhas para saída. Os% 1,% 2 e% 3 representam cada um desses parâmetros de entrada no script.

 @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
    
por 13.07.2011 / 04:54