batch file删除文本文件的前三行
作为标题状态,我需要一个batch file来删除文本文件的第一行3。
例如:
ABCDEFG
在这个例子中,我需要将A,B和C一起删除
这应该做到这一点
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
这将重新创build与前3行删除的文件。
要保持用户更新,可以将消息以vbscript样式集成到batch file中,或者在命令提示符中输出消息。
@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
希望这可以帮助。
more +3 "file.txt" >"file.txt.new" move /y "file.txt.new" "file.txt" >nul
以上是速度快,效果很好,有以下限制:
- 制表符被转换成一系列的空格。
- 要保留的行数必须小于〜65535。 如果超出行号,则会挂起更多(等待按键)。
- 所有行将被回车和换行而终止,而不pipe它们在源文件中是如何被格式化的。
以下使用FINDSTR使用FOR / F的解决scheme更健壮,但速度更慢。 与简单的FOR / F解决scheme不同,它保留了空行。 但是像所有的FOR / F解决scheme一样,它被限制在一个小于8191字节的最大行长度。 再次,所有的行将被回车和换行。
@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
如果您有我手边的JREPL.BAT正则expression式文本处理实用程序 ,那么您可以使用以下内容来获得一个非常健壮和快速的解决scheme。 这仍然会终止所有的回车和换行(\ r \ n),不pipe原始格式。
jrepl "^" "" /k 0 /exc 1:3 /f "test.txt" /o -
您可以通过添加/U
选项来写入\ n行结束符而不是\ r \ n。
如果您必须保留原始行结束符,则可以使用以下变化forms。 这将整个源文件加载到一个JScriptvariables,所以总文件大小被限制为大约1或2千兆字节(我忘了确切的数字)。
jrepl "(?:.*\n){1,3}([\s\S]*)" "$1" /m /f "test.txt" /o -
请记住,JREPL是batch file,所以如果在另一批处理脚本中使用该命令,则必须使用CALL JREPL。
使用sed只打印从第4行开始( 编辑:只有当您使用Un * x 🙂
$ sed -e '4,$p' in.txt
在第n行之后使用“more”命令输出文件命令(windows)
More +n orginalfilename.txt > outputfilename.txt
说明:输出第n行后的txt文件
如果你想跳过第一行,尾行最后一行,你可以使用我的代码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%
您可以跳过或尾部的平面文件没有任何额外的工具。