我已经多次搜索过这个网站并找到了很多相关的问题,但没有一个问题与我的问题完全相同所以......我只需要删除txt文件中的第2行到最后一行(%txtfile%.txt),那就是所有。它是倒数第二的原因是因为文件是使用echo.Sample text>>"%txtfile%.txt"
制作的,所以它在结尾留下了一个emty线。我现在想要删除空白行的最后一行EXCEPT。我该怎么做?
答案 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
运行上面的代码后,所需的行将被删除。最后一行仍将终止,因此文本编辑器在文件结束后仍会显示空行。