将文本文件的前 2 行复制到另一个文本文件的批处理文件

SC.*_*SC. 4 windows-7 find batch-file

我有一个文本文件 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)
Run Code Online (Sandbox Code Playgroud)

我想把这个文件的前两行复制到另一个文件B.txt中,即

Pinging [xx.xx.xx.xx] with 32 bytes of data:
Request timed out.
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用 FOR /F 来遍历文件中的行。我知道如何跳过前两行,但不仅仅是阅读它们。我还尝试通过将 FOR /F 与 DO ECHO 和相关的 FIND 命令以及直接的 FINDSTR 命令(在这两种情况下都搜索“Pinging”和“Request”)一起使用来做到这一点,但我无法正常工作。

Sco*_*ney 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
)
Run Code Online (Sandbox Code Playgroud)

基本上,您将计数器变量 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
Run Code Online (Sandbox Code Playgroud)