RT
在批处理程序当前目录下,有一个63.txt
要求用户输入字符,然后程序在63.txt中搜寻,找到后将该行及后面两行显示出来
如果未找到,则跳转至标签":X"去,":X"下暂时写上pause命令,我还要自己改— —。
RT
在批处理程序当前目录下,有一个63.txt
要求用户输入字符,然后程序在63.txt中搜寻,找到后将该行及后面两行显示出来
如果未找到,则跳转至标签":X"去,":X"下暂时写上pause命令,我还要自己改— —。
貌似可以,不过很难。我现在没有时间,只能给你个简单的思路……
显然,用find命令效率很高,不过要显示出目标及其后面的行可能做不到。
所以我有个笨办法:
用for循环一行一行的读取63.txt中的文字,每读取一行作以下处理:
首先将读取出来的行中的符合用户输入字符的内容(整体)替换掉(比如替换为空),然后再与替换前比较。
如果比较结果相同,则说明没有被替换的内容,也就是所这一行不是用户查找的目标。
如果比较发现替换后于原来不一样了,则说明此行包括用户搜索的内容,符合条件,接下来,你可以继续搜索符合条件的行,或者结束搜索并将当前行及下两行显示出来……
第一位朋友的思路不错,可惜没说怎么显示目标行的下两行。
第二位朋友看都不用看,goto :x,连:x标签都没有。
第三位朋友的代码的确比较长,没有明显错误,但测试后只会显示最后一个目标行的后两行,前面所有目标行的后两行都不显示。
@echo off setlocal enabledelayedexpansion set a=0 for /f "delims=" %%i in (1.txt) do ( set /a a+=1 echo !a!.%%i>>2.txt ) set a= set b= for /f "delims=" %%i in (2.txt) do ( set a=%%i set b=%%i set a=!a:要查找的字符=! if "!a!"=="!b!" ( echo !a!) else ( echo !b!>>3.txt ) ) set a= set b= for /f "delims=." %%i in (3.txt) do ( set a=%%i set /a b=a+1 set /a c=a+2 ) for /f "tokens=1,2* delims=." %%i in (2.txt) do ( set e=%%i set f=%%i.%%j if "!e!"=="!b!" ( echo !f!>>3.txt ) if "!e!"=="!c!" ( echo !f!>>3.txt ) )
代码有点长,不过可以解决问题的。楼主看下,,,,
补充一下,1.txt是存放要处理的文本。3.txt是输出的文本。
脚本产生临时文件“%temp%\0.tmp”,提取的指定行保存在里面(清理垃圾文件可以清理掉)。楼主可以自行测试一下
@echo off set path="63.txt" rem 这里需要设置完整路径 set re=%temp%\0.tmp
set /p str=输入字符:
echo.>%re% setlocal ENABLEDELAYEDEXPANSION for /f "tokens=1 delims=:" %%l in ('findstr /n "%str%" %path%') do ( set /a s=%%l+1 set /a n=%%l+2 call :skip echo.>>%re%)
findstr "%str%" %re%||(cls&echo 跳到标签X&pause&goto :x) cls&type %re%&pause
:skip for /f "tokens=1,* delims=:" %%i in ('findstr /n . %path%') do ( if %%i==%%l echo %%j >>%re% if %%i==%s% echo %%j >>%re% if %%i==%n% echo %%j >>%re%)