使用批处理从文本文件中删除最后一行(包括空行)

时间:2018-03-29 13:53:29

标签: batch-file

我的文字文件

Header
A,B,C,D,E
F,G,H,I,J
K,L,M,N,O
Footer

我想要删除页脚并在页脚下方清空行(空行不是静态的)和我预期的输出

Header
A,B,C,D,E
F,G,H,I,J
K,L,M,N,O

我尝试了下面的代码,但它只删除了最后一个空行。

set row=
for /F "delims=" %%j in (file.txt) do (
  if  defined row echo.!row!>> newfile.txt
  set row=%%j
)

3 个答案:

答案 0 :(得分:2)

这是执行任务的通用方法; 如果您想要不同的东西,请考虑提供更具体的信息和示例文件

@Echo Off
SetLocal DisableDelayedExpansion

Set "SrcFile=file.txt"

If Not Exist "%SrcFile%" Exit /B
Copy /Y "%SrcFile%" "%SrcFile%.bak">Nul 2>&1||Exit /B

(   Set "Line="
    For /F "UseBackQ Delims=" %%A In ("%SrcFile%.bak") Do (
        SetLocal EnableDelayedExpansion
        If Defined Line Echo !Line!
        EndLocal
        Set "Line=%%A"))>"%SrcFile%"
EndLocal
Exit /B

您应该在第4行更改文件名,以匹配您的实际源文件名称。如果您对结果感到满意,可以选择删除.bak文件(这是原始文件的备份,为安全而保存)

注意: 结果文件将以正常CRLF结束(即底部会有一个空行)。< / em>的

答案 1 :(得分:1)

如何简单:

FINDSTR /R /I /V "^$ Footer" file.txt>>newfile.txt

  1. / R表示regexp
  2. /我表示不区分大小写
  3. / V表示EXCLUDE匹配,而不是显示
  4. 双引号中的

    (将用空格分隔)将应用的所有正则表达式:

    1. ^ $匹配空行
    2. 页脚匹配确切的单词Footer

答案 2 :(得分:0)

非常直接:阅读直到你点击页脚,然后退出(删除页脚和之后的任何内容):

@echo off
for /F "delims=" %%j in (file.txt) do (
  echo %%j|findstr /b "Footer" >nul && goto :done
  echo %%j>> newfile.txt
)
:done