Windows批处理脚本中如何打印搜索字符串的前两行
Windows批处理实现捕获指定Authadd条目对应的Principle和profile值
直接用以下批处理脚本即可实现需求:
@echo off setlocal enabledelayedexpansion set "prev1=" set "prev2=" for /f "delims=" %%a in (file.txt) do ( set "current=%%a" if "!current:~0,8!"=="Authadd:" ( if not "!current:CRT=!"=="!current" ( echo !prev1! echo !prev2! echo. ) else if not "!current:DLT=!"=="!current" ( echo !prev1! echo !prev2! echo. ) ) set "prev1=!prev2!" set "prev2=!current!" ) endlocal
脚本说明
- 延迟变量扩展:启用
enabledelayedexpansion是为了在for循环中实时读取变量的更新值。 - 行记录逻辑:用
prev1和prev2两个变量保存最近读取的两行内容,始终维护一个两行的"队列"。 - 匹配判断:
- 先检查当前行是否以
Authadd:开头 - 再判断行内是否包含
CRT或DLT(通过字符串替换后对比原字符串实现包含判断)
- 先检查当前行是否以
- 输出结果:当匹配到目标Authadd行时,输出之前保存的
prev1(对应Principle行)和prev2(对应profile行),可选的echo.用来在每组结果间加空行分隔。
如果需要将结果输出到文件(比如result.txt),只需把脚本中的echo !prev1!和echo !prev2!修改为:
echo !prev1! >> result.txt echo !prev2! >> result.txt
内容的提问来源于stack exchange,提问作者sachinrameshch
相关产品推荐
相关产品推荐

