Batch file to delete first 3 lines of a text file

后端 未结 5 1766
广开言路
广开言路 2020-11-28 14:06

As the title states I need a batch file to delete the FIRST 3 lines of a text file.

for example:

A    
B    
C    
D    
E   
F    
G
相关标签:
5条回答
  • 2020-11-28 14:25

    I use "more" command for outting file after nth line Command (windows)

    More +n orginalfilename.txt > outputfilename.txt
    

    Description: Outputting file of txt after nth line

    0 讨论(0)
  • 2020-11-28 14:31

    If you want to skip the first and tail the last lines, you can use my code at http://www.harchut.de/download/ms-dos/skip-tail-flatfile-example.zip

    set L_TRIMFILE_CNT=0
    set L_TRIMFILE_TMPFILE=work.countrows.find.tmp
    find /c /v "" %P_TRIMFILE_INFILE% > %L_TRIMFILE_TMPFILE%
    for /f "skip=1 tokens=3* " %%a in (%L_TRIMFILE_TMPFILE%) do (
      if %L_TRIMFILE_CNT% == 0 set L_TRIMFILE_CNT=%%a
    )
    del %L_TRIMFILE_TMPFILE%
    set /a L_TRIMFILE_EOF=%L_TRIMFILE_CNT%-%P_TRIMFILE_TAIL%
    findstr /n .* "%P_TRIMFILE_INFILE%" > %L_TRIMFILE_TMPFILE%
    if exist %P_TRIMFILE_OUTFILE% del %P_TRIMFILE_OUTFILE%
    set V_TRIMFILE_SKIP="skip=%P_TRIMFILE_SKIP% tokens=1* delims=:"
    if %P_TRIMFILE_SKIP% equ 0 set V_TRIMFILE_SKIP="tokens=1* delims=:"
    for /f %V_TRIMFILE_SKIP% %%a in (%L_TRIMFILE_TMPFILE%) do (
      if %%a leq %L_TRIMFILE_EOF% if exist %P_TRIMFILE_OUTFILE% @echo.%%b>>%P_TRIMFILE_OUTFILE%
      if %%a leq %L_TRIMFILE_EOF% if not exist %P_TRIMFILE_OUTFILE% @echo.%%b>%P_TRIMFILE_OUTFILE%
    )
    del %L_TRIMFILE_TMPFILE%
    

    You can skip or tail line of a flatfile without any additional utility.

    0 讨论(0)
  • 2020-11-28 14:36

    This should do it

    for /f "skip=3 delims=*" %%a in (C:\file.txt) do (
    echo %%a >>C:\newfile.txt    
    )
    xcopy C:\newfile.txt C:\file.txt /y
    del C:\newfile.txt /f /q
    

    That will re-create the file with the first 3 lines removed.

    To keep the user updated you could integrate messages in the batch file in vbscript style or output messages in the command prompt.

    @echo off
    echo Removing...
    for /f "skip=3 delims=*" %%a in (C:\file.txt) do (
    echo %%a >>C:\newfile.txt
    ) >nul
    echo Lines removed, rebuilding file...
    xcopy C:\newfile.txt C:\file.txt /y >nul
    echo File rebuilt, removing temporary files
    del C:\newfile.txt /f /q >nul
    msg * Done!
    exit >nul
    

    Hope this helps.

    0 讨论(0)
  • 2020-11-28 14:40
    more +3 "file.txt" >"file.txt.new"
    move /y "file.txt.new" "file.txt" >nul
    

    The above is fast and works great, with the following limitations:

    • TAB characters are converted into a series of spaces.
    • The number of lines to be preserved must be less than ~65535. MORE will hang, (wait for a key press), if the line number is exceeded.
    • All lines will be terminated by carriage return and linefeed, regardless how they were formatted in the source.

    The following solution using FOR /F with FINDSTR is more robust, but is much slower. Unlike a simple FOR /F solution, it preserves empty lines. But like all FOR /F solutions, it is limited to a max line length of a bit less than 8191 bytes. Again, all lines will be terminated by carriage return and linefeed.

    @echo off
    setlocal disableDelayedExpsnsion
    >"file.txt.new" (
      for /f "delims=" %%A in ('findstr /n "^" "file.txt"') do (
        set "ln=%%A"
        setlocal enableDelayedExpansion
        echo(!ln:*::=!
        endlocal
      )
    )
    move /y "file.txt.new" "file.txt" >nul
    

    If you have my handy-dandy JREPL.BAT regex text processing utility, then you could use the following for a very robust and fast solution. This still will terminate all lines with carriage return and linefeed (\r\n), regardless of original format.

    jrepl "^" "" /k 0 /exc 1:3 /f "test.txt" /o -
    

    You can write \n line terminators instead of \r\n by adding the /U option.

    If you must preserve the original line terminators, then you can use the following variation. This loads the entire source file into a single JScript variable, so the total file size is limited to approximately 1 or 2 gigabytes (I forgot the exact number).

    jrepl "(?:.*\n){1,3}([\s\S]*)" "$1" /m /f "test.txt" /o -
    

    Remember that JREPL is a batch file, so you must use CALL JREPL if you use the command within another batch script.

    0 讨论(0)
  • 2020-11-28 14:41

    Use sed to only print beginning with the 4th line (Edit: Only if you use Un*x :)

    $ sed -e '4,$p' in.txt 
    
    0 讨论(0)
提交回复
热议问题