如何使用批处理删除文本文件中的倒数第二行?

时间:2012-02-14 03:08:50

标签: batch-file

我已经多次搜索过这个网站并找到了很多相关的问题,但没有一个问题与我的问题完全相同所以......我只需要删除txt文件中的第2行到最后一行(%txtfile%.txt),那就是所有。它是倒数第二的原因是因为文件是使用echo.Sample text>>"%txtfile%.txt"制作的,所以它在结尾留下了一个emty线。我现在想要删除空白行的最后一行EXCEPT。我该怎么做?

1 个答案:

答案 0 :(得分:0)

你对最后一行的定义与我的不同。这对字符<CarriageReturn><LineFeed>终止一行。在文件的末尾,您有一行已终止,后面没有任何内容。如果在文本编辑器中打开文件并转到文件末尾,则光标将位于空行。但该行不是当前文件的一部分。在我看来,最后一行是上面的一行。

您可以使用FIND确定行数。 FIND也不认为在最后一行终止符之后有一行。然后使用FINDSTR为每一行添加前缀为第二个FINDSTR的行号,以过滤掉“最后”行。 FOR循环读取输出,SET搜索和替换删除行号前缀。如果在扩展%% L变量期间在文件内容中找到延迟扩展,则在循环内打开和关闭延迟扩展以防止!被破坏。

@echo off
setlocal disableDelayedExpansion
set file="test.txt"
for /f %%N in ('find /c /v "" ^<%file%') do set skip=%%N
(
  for /f "delims=" %%L in ('findstr /n "^" %file%^|findstr /v "^%skip%:"') do (
    set "ln=%%L"
    setlocal enableDelayedExpansion
    echo(!ln:*:=!
    endlocal
  )
)>%file%.new
move %file%.new %file% >nul

运行上面的代码后,所需的行将被删除。最后一行仍将终止,因此文本编辑器在文件结束后仍会显示空行。