本帖最后由 buyiyang 于 2022-4-3 12:58 编辑
你又来啦,这个问题我有一个思路,但水平太菜,代码撸不出,不过我觉得分享讨论一下思路也不错(符合本版的”注意“)
1.首先用for和findstr找出"----------"所在的行号,- for %%i in (*.txt) do (
- for /f "tokens=1* delims=:" %%a in ('findstr /n /r /c:"----------" "%%i"') do (……)
复制代码 2.将上述相邻的的一对行号作为一对变量,%m%和%n%,并分别对应,
比如a.txt的例子,行号有1、4、8,当%m%=1时%n%=4,当%m%=4时%n%=8,
我想到的是将找出的所有行号变成一串字符,再用set截取变成两组变量的值,再用for进行提取并用for的嵌套使%m%和%n%分别对应,比如1=4=8=截取为1=4和4=8(加上=是方便for提取)- for /f "tokens=1* delims=:" %%a in ('findstr /n /r /c:"----------" "%%i"') do >>by.txt echo,%%a
- for /f "delims=" %%a in (by.txt) do (set /p=%%a=<nul>>byy.txt)
- for /f "delims=" %%a in (byy.txt) do set "str=%%a"
- set "str1=!str:~0,-3!
- set "str2=!str:~2,-1!
- for %%a in (!str1!) do (
- set "m=%%a"
- for %%a in (!str2!) do (
- set "n=%%a"
复制代码 3.最后再根据%m%获得----------下一行的行号%x%,再根据%x用for和%findstr找出----------下一行的内容%str3%,再找出%str3%在文本中的所有行号%y%,
如果%y%geq%m%,当%y%gtr%n%,则删除%m%到%n%-1行的内容,
当%y%lss%n%,则输出%m%行,%y%到%n%-1行的内容或删除%m+1%到%y%-1的内容。。 |