Windows批处理跳过行直到发生特定字符串

时间:2014-08-14 13:13:57

标签: batch-file

我有多个文本文件,以一些行开头,后跟一行(第n行),其中包含一个特定的字符串。此字符串在每个文件中都是唯一的。我想要做的是删除前n行并保持文件中的其他行。我试过这个:

@echo off

FOR %%G IN ("%~dp0\*.txt") DO (
    FOR /f "skip=3 delims=*" %%a IN (%%G) DO (
        ECHO %%a >>%~dp0\out\%%~nG.txt
    ) >nul
)

但这只会跳过固定数量的行。然后我尝试用

获取关键字行的行号
FIND /N "KEY_WORD" %%G

此时我不知道如何从FIND命令的结果中提取行号。还有其他解决方案吗?

提前致谢。

修改:示例文件

line_1
line_2
line_3
key_word
line_4
line_5
...

我只想保留“key_word”的内容。此示例的输出应为:

line_4
line_5
...

3 个答案:

答案 0 :(得分:1)

这是一个举例的方法。

代码 -

@echo off
for /f "delims=:" %%i in ('findstr /rinc:"key_word"  input.txt') do (set line_no=%%i)
for /f "skip=%line_no% delims=" %%a in ('type input.txt') do (echo %%a)

样本 -

D:\Scripts\dummy>type input.txt
line_1
line_2
line_3
key_word
line_4
line_5
line_6


D:\Scripts\dummy>type draft.bat
@echo off
for /f "delims=:" %%i in ('findstr /rinc:"key_word"  input.txt') do (set line_no=%%i)
for /f "skip=%line_no% delims=" %%a in ('type input.txt') do (echo %%a)


D:\Scripts\dummy>draft.bat
line_4
line_5
line_6

干杯,G

答案 1 :(得分:0)

这是一个强大的方法来删除文件的开头,直到找到"某些字符串"在一条线上,包括在内。

这些术语是正则表达式。

type "file.txt" |findrepl /v "." /e:"some string" >"newfile.txt"

这使用名为findrepl.bat的助手批处理文件(由aacini提供) - 从以下网址下载:https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat

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

答案 2 :(得分:0)

也许

for /f %%a in ('find /n "KEY_WORD" %%G') do (
 set linenum=%%a
 echo line %%a selected
)
...
echo linenum=%linenum%

但是不知道你想要什么样的例子,难以勉强。