我需要创建一个批处理脚本,该脚本将查看文本文件内部并从中搜索"permission denied"字符串。
如果脚本将找到上面的字符串,那么它将打印搜索字符串("permission denied")之后可用的下10行。
下面是我正在尝试的代码,但它没有提供所需的结果:
for /F "delims=:" %%a in ('findstr /I /N /C:"permission denied" %temp%') do (
echo %%a
set /A after=%%a
set nextline=!after!+1
set "numbers=!after!:"
echo !numbers!
echo %nextline%
)
rem Search for the lines
for /F "tokens=1* delims=" %%a in ('findstr /N "^" %temp% ^| findstr /B "%numbers%"') do echo %%~nb
上面的代码只生成行号。不是内容
应该可以:
@echo off
SETLOCAL EnableDelayedExpansion
SET /a printLines=0
FOR /F "tokens=*" %%l IN (<your log file>) DO (
SET line=%%l
SET line=!line:permission denied=!
IF NOT %%l==!line! SET /a printLines=11
IF !printLines! GTR 0 (
ECHO %%l
SET /a printLines=!printLines!-1
)
)
PAUSE
@echo off
setlocal enabledelayedexpansion
set temp=input.txt
for /F "tokens=1 delims=:" %%a in ('findstr /I /N /C:"permission denied" "%temp%"') do (
set /a start=%%a + 1
set /a end=%%a + 10
)
FOR /L %%I IN (%start%,1,%end%) DO SET LINES=!LINES! %%I:
FOR /F "TOKENS=* delims= " %%G in ("!lines!") DO SET lines=%%G
echo %lines%
rem Search for the lines
for /F "tokens=1* delims=:" %%a in ('findstr /N "^" "%temp%" ^| findstr /B "%lines%"') do echo %%b
pause
前10行@echo off
setlocal enabledelayedexpansion
set temp=input.txt
for /F "tokens=1 delims=:" %%a in ('findstr /I /N /C:"permission denied" "%temp%"') do (
set /a start=%%a - 10
set /a end=%%a -1
)
IF %start% lss 1 set start=1
FOR /L %%I IN (%start%,1,%end%) DO SET LINES=!LINES! %%I:
FOR /F "TOKENS=* delims= " %%G in ("!lines!") DO SET lines=%%G
echo %lines%
rem Search for the lines
for /F "tokens=1* delims=:" %%a in ('findstr /N "^" "%temp%" ^| findstr /B "%lines%"') do echo %%b
pause
我认为这是最快/最简单的方法:
@echo off
setlocal EnableDelayedExpansion
set "temp=input.txt"
for /F "delims=:" %%a in ('findstr /I /N /C:"permission denied" "%temp%"') do set "line=%%a"
set lines=0
for /F "delims=" %%a in ('more +%line% "%temp%"') do (
echo %%a
set /A lines+=1
if !lines! equ 10 goto break
)
:break
要显示匹配行之前的10行,只需将do set "line=%%a"
更改为do set /A "line=%%a-11"
,并首先在下面添加这一行:if %line% lss 0 set "line=0"