批处理文件删除文本文件的前3行

时间:2012-07-11 08:39:36

标签: file batch-file text lines

正如标题所述,我需要一个批处理文件来删除文本文件的第1行。

例如:

A    
B    
C    
D    
E   
F    
G

在这个例子中,我需要删除A,B和C以及行

5 个答案:

答案 0 :(得分:15)

more +3 "file.txt" >"file.txt.new"
move /y "file.txt.new" "file.txt" >nul

以上内容很快且效果很好,但有以下限制:

  • TAB字符转换为一系列空格。
  • 要保留的行数必须小于~65535。如果超过行号,则会挂起(等待按键)。
  • 所有行都将通过回车和换行来终止,无论它们在源中的格式如何。

使用带有FINDSTR的FOR / F的以下解决方案更加强大,但速度要慢得多。与简单的FOR / F解决方案不同,它保留了空行。但与所有FOR / F解决方案一样,它的最大行长限制为小于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 regex text processing utility,那么您可以使用以下内容获得非常强大而快速的解决方案。无论原始格式如何,这仍将终止所有带回车符和换行符(\ r \ n)的行。

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

您可以通过添加/U选项来编写\ n行终止符而不是\ r \ n。

如果必须保留原始行终止符,则可以使用以下变体。这会将整个源文件加载到单个JScript变量中,因此总文件大小限制为大约1或2千兆字节(我忘记了确切的数字)。

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

请记住,JREPL是一个批处理文件,因此如果您在另一个批处理脚本中使用该命令,则必须使用CALL JREPL。

答案 1 :(得分:11)

这应该这样做

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

这将重新创建删除前3行的文件。

为了让用户保持更新,您可以在vbscript样式中将消息集成到批处理文件中,或者在命令提示符中输出消息。

@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

希望这有帮助。

答案 2 :(得分:3)

使用sed仅从第4行开始打印(编辑:仅当您使用Un * x时:)

$ sed -e '4,$p' in.txt 

答案 3 :(得分:1)

我使用"更多"第n行后输出文件的命令 命令(窗口)

More +n orginalfilename.txt > outputfilename.txt

描述:     在第n行之后输出txt文件

答案 4 :(得分:0)

如果你想跳过第一行并拖尾最后一行,你可以使用我的代码 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%

您可以在没有任何其他实用程序的情况下跳过或拖尾平面文件。