Batch file 将周围的行返回到字符串windows批处理文件

Batch file 将周围的行返回到字符串windows批处理文件,batch-file,windows-scripting,findstr,Batch File,Windows Scripting,Findstr,我使用findstr以以下方式搜索文件中的字符串: findstr "test" file.txt 这将返回找到test的行,但我想返回匹配行上方和下方的3行。我看了一下,似乎没有任何内置选项可以findstr返回周围的行。给你 @echo off setlocal enabledelayedexpansion for /f "tokens=1 delims=:" %%a in ('findstr /n "hello" file.txt') do ( set /a line=%%a ) set

我使用
findstr
以以下方式搜索文件中的字符串:

findstr "test" file.txt
这将返回找到
test
的行,但我想返回匹配行上方和下方的3行。我看了一下,似乎没有任何内置选项可以
findstr
返回周围的行。

给你

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1 delims=:" %%a in ('findstr /n "hello" file.txt') do (
set /a line=%%a
)
set /a num=0
for /l %%b in (3,-1,1) do (
set /a lines[!num!]=!line!-%%b
set /a num+=1
)
for /l %%c in (1,1,3) do (
set /a lines[!num!]=!line!+%%c
set /a num+=1
)
set /a count=1
for /f "tokens=* delims=" %%d in (file.txt) do (
for /l %%e in (%lines[0]%,1,%lines[5]%) do (
if !count!==%%e if not %%e==!line! echo %%d
)
set /a count+=1
)
pause >nul

我已经将我的答案更新为更好、更灵活的答案。这是find和findstrI中令人恼火的缺陷。我认为这不管用。如果我遗漏了什么,请纠正我,但是第一个FOR循环只是反复设置“line”,所以只有最后一个才重要?