通过批处理文件删除txt文件中的行,直到找到序列

时间:2014-03-05 04:23:26

标签: batch-file

我有一个生成的txt文件。此文件具有某些多余的行,需要删除。我需要删除所有行,直到找到我要查找的序列“AA BB CC DD”并停止删除并保存为新文件。

因此,如果txt文件如下所示:

Good Line of data
bad line of C:\Directory\ERROR\myFile.dll
Another good line of data
bad line: REFERENCE 
AA BB CC DD THis is the start of valid data
Line 2
Line 3
End

我希望新文件的结尾如下:

AA BB CC DD THis is the start of valid data
Line 2
Line 3
End

TIA。

3 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
SET "output="
SET "string=AA BB CC DD"
(
FOR /f "USEBACKQdelims=" %%a IN ("c:\batch scripts\q22188484.txt") DO (
 IF NOT DEFINED output (ECHO %%a|FIND "%string%" >NUL&IF NOT ERRORLEVEL 1 SET output=Y)
 IF DEFINED output ECHO(%%a
)
)>"newfile.txt"

GOTO :EOF

我使用名为q22188484.txt的文件进行测试;输出newfile.txt


修复:要允许fiename中的空格,需要引号但还需要USEBACKQ选项。 newfile同样修改以适应。

答案 1 :(得分:0)

这将显示where it matches the string99999 lines after it之间的行,这些行在大多数情况下会一直持续到最后。为这个数字增加了另外9个近100万行。

搜索字词是正则表达式,因此如果您使用某些字符,则可能需要使用\

进行转义

这使用名为findrepl.bat的帮助程序批处理文件 - 从https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat

下载

findrepl.bat放在与批处理文件相同的文件夹中或路径上。

type "file.txt"|findrepl "AA BB CC DD"  /o:0:99999

答案 2 :(得分:0)

@echo off
setlocal

set "filename=C:\Batch Scripts\File Name.txt"
for /F "usebackq delims=:" %%a in ('findstr /N /C:"AA BB CC DD" "%filename%"') do set "line=%%a" & goto continue
:continue
(for /F "usebackq skip=%line% delims=" %%a in ('findstr "^" "%filename%"') do echo %%a) > newFile.txt