@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!了。