批处理提取关键词第二次出现的行并输出行号。

比如a.txt文本内容
aaa11111
222222334
aaa3455555
qw22323
我想提取aaa第二次出现的行即aaa3455555,并输出行号3

@echo off
cd /d %~dp0
setlocal enabledelayedexpansion

for /f "tokens=1,2 delims=:" %%a in ('findstr /n "^aaa" "a.txt"') do (
    set /a Line+=1
    set L_Num=%%~a
    set Str=%%~b
    if !Line! gtr 1 goto Next
)
exit

:Next
echo 行号:%L_Num%
echo 内容:%Str%
pause

追问

真是大神啊,很多次都是您耐心帮我解答,我想补充一下做个统计,比如
统计关键词总共出现了几次
第一次出现的行号和内容,第二次出现的行号和内容......可以解决吗?我会提高悬赏的

追答@echo off
cd /d %~dp0

set Line=0

for /f "tokens=1,2 delims=:" %%a in ('findstr /n "^aaa" "a.txt"') do (
    echo 行号:%%~a
    echo 内容:%%~b
    echo,
    set /a Line+=1
)
echo 总次数:%Line%
pause
exit

追问

谢谢大神,echo 行号:%%~a这一行我想增加为echo 第变量次出现行号:%%~a,我想知道是哪一次出现的行号和内容,谢谢了

追答@echo off
cd /d %~dp0

set Line=0

for /f "tokens=1,2 delims=:" %%a in ('findstr /n "^aaa" "a.txt"') do (
    set /a Line+=1
    call echo 第%%Line%%次出现行号:%%~a
    echo 内容:%%~b
    echo,
)
pause
exit

追问

谢谢您了,能解释一下call echo 第%%Line%%次出现行号:%%~a吗,为什么用到call,为什么这里的%%Line%%是两个百分号呢?

追答

因为我没有开启环境变量延迟,目的是防止出现内容有英文感叹号,会被忽略掉,所以循环中变化的变量值设置,就需要借助call和双百分号来正常显示变化的值了。
当然,如果内容不会存在英文感叹号,那么开启环境变量延迟后,就可以不需要用call,%%Line%%么就可以换成!Line!了。

温馨提示:答案为网友推荐,仅供参考
相似回答