Batch file to delete first 3 lines of a text file
Solution 1
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.
Solution 2
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.
Solution 3
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
kriegy
i am simply inspired by many of my fathers friends who are genius's on pc's
Updated on July 09, 2022Comments
-
kriegy almost 2 years
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
in this example I need A,B and C deleted along with the line
-
kriegy almost 12 yearsi seem to have run in to an error ">> was unexcpected at this time"
-
Bali C almost 12 yearsSorry, there was a typo, I had put a
"
sign in the filename in thefor
loop, try now. -
Bali C almost 12 yearsSorry, I couldn't test the code when I posted it. I have edited it again and tested this time and it works. I forgot the
delims
so it was breaking when it hit a space. Try now. -
kriegy almost 12 yearsit took us a while but we got there thank you i'm going to put up another question it involves if statements ...yay
-
Bali C almost 12 yearsNo worries, yeah, got there in the end! :) Ok, I will look out for it!
-
dbenham almost 12 years@kriegy - there are still problems with this script. It will truncate line at 1st
*
character. It will strip lines beginning with;
. It will strip blank lines. There are ways to eliminate the problems, but there is a simpler solution using MORE -
kriegy almost 12 yearsis it worth having vbscript msgbox GUI?
-
kriegy almost 12 yearsis it worth having vbscript msgbox GUI?
-
Bali C almost 12 years@kriegy What do you mean? Use a messagebox for what?
-
kriegy almost 12 yearsthe file im writing will be used by someone who isn't as good as i am (and that is saying something) i thought would msgboxes be good so like: running, done simple stuff i know the minimum of vbscript (tiny bit)
-
Bali C almost 12 years@kriegy Ok, see my answer, I have updated with some suggestions.
-
Bali C almost 12 yearsI don't know a lot of VB, you mean like
msgbox"Hello kriegy!"
orwscript.echo("Hello")
-
Bali C almost 12 yearsI think the batch will be fine, after all it only takes a second to do, why not just put a
echo Done
and apause >nul
at the end so they know it's done and they can just close it. -
Amit about 9 yearsYou might want to add a little explanation on this answer. Always better to give a person a fishing rod than giving him a fish.
-
dbenham over 8 yearsEDIT - Added a more robust but slow FOR /F solution, as well as fast and robust JREPL.BAT solutions.