我有多个文本文件,以一些行开头,后跟一行(第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
...
答案 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%
但是不知道你想要什么样的例子,难以勉强。