bat批处理怎么取文本含有指定内容的下一行到空白行之间的内容?

如题。文本内容:
硬盘1: 大小:931.51GB 型号:HGST 分区表:MBR
分区D: 大小:330.13GB 剩余:100.35GB 使用率:98.38%
分区E: 大小:601.25GB 剩余:200.71GB 使用率:98.88%

硬盘2: 大小:465.76GB 型号:ST3500413AS 分区表:MBR
分区F: 大小:465.63GB 剩余:398.32GB 使用率:14.46%

硬盘3: 大小:465.76GB 型号:ST3500413AS 分区表:MBR
分区G: 大小:465.63GB 剩余:200.32GB 使用率:14.46%

硬盘4: 大小:465.76GB 型号:ST3500413AS 分区表:MBR
分区H: 大小:465.63GB 剩余:200.32GB 使用率:14.46%

硬盘5: ......
取硬盘1的下一行到空白行之间的内容
结果:
分区D: 大小:330.13GB 剩余:100.35GB 使用率:98.38%
分区E: 大小:601.25GB 剩余:200.71GB 使用率:98.88%
输出到1.txt
或者
取硬盘2的下一行到空白行之间的内容
结果:
分区F: 大小:465.63GB 剩余:398.32GB 使用率:14.46%
输出到1.txt

假设各硬盘空间占用情况保存在 文本内容.txt

那么:

@echo off&setlocal enabledelayedexpansion
(for /f "tokens=*" %%c in ('findstr /n .* 文本内容.txt') do (
set "text=%%c"
if "!flag!"=="1" if not ""=="!text:~2,1!" echo !text:~2!
if "!text:~2,3!"=="硬盘1" set flag=1
if "!flag!"=="1" if "!text:~2,1!"=="" set flag=0
))>1.txt
echo 已经保存到当前文件夹的1.txt文件中
pause>nul

追问

你好。得到指定硬盘1和硬盘2能取得下一行与空白行之间的分区信息,查找指定硬盘3或硬盘4不能取得正确的分区结果。能否有通用的方法能够不局限于硬盘1和硬盘2 取得查找更多硬盘下一行与空白行间的内容。

追答

    我有2种写法

    第1种全部结果保存在1个文件中

    第2种保存在对应硬盘命名的文件中

    可以处理26个分区

    @echo off&setlocal enabledelayedexpansion
    (for /f "tokens=*" %%c in ('findstr /n .* test.txt') do (
    set "text=%%c"
    set /a line+=1
    if !line! leq 9 (set sum=2) else (set sum=3)
    set /a sum2=2+sum
    set /a sum3=sum-1
    for %%x in (!sum!) do (
    if "!flag!"=="1" if not ""=="!text:~%%x,1!" echo !text:~%%x!
    for %%y in (!sum2!) do if "!text:~%%x,2!"=="硬盘" for %%z in (!sum3!) do (set flag=1&set no=!text:~%%y,%%z!&set no=!no::=!&echo 硬盘!no!)
    if "!flag!"=="1" if "!text:~%%x,1!"=="" (set flag=0&set no=&echo.)
    )))>1.txt
    echo 已经保存到当前文件夹的1.txt文件中
    pause>nul

~~~超字数了,无法追答。如有疑问或有兴趣,追问发第2种写法。
真的超了,发不了。

追问

可能是表达错误也有理解错误。需求是单独查找不是查找全部或查找到硬盘4的分区 如 查找硬盘1 取硬盘1行下到空行之间的结果:分区D: 大小:330.13GB 剩余:100.35GB 使用率:98.38% 分区E: 大小:601.25GB 剩余:200.71GB 使用率:98.88% 也有可能是单独查找 硬盘4 或者硬盘5。追答查找了全部的分区还是我弄错了。回答1符合需求只是不能单独查找 硬盘3、4 或者5。

追答@echo off&setlocal enabledelayedexpansion
:home
set /p disk=请输入硬盘编号(1-99):
for /l %%c in (1 1 99) do if "%disk%"=="%%c" goto :start
cls&echo 输入无效,请重新输入&goto :home
:start
if %disk% gtr 9 (set dSum=4) else (set dSum=3)
(for /f "tokens=*" %%c in ('findstr /n .* test.txt') do (
set "text=%%c"
set /a line+=1
if !line! leq 9 (set sum=2) else (set sum=3)
set /a sum2=2+sum
for %%i in (!sum!) do (
if "!flag!"=="1" if not ""=="!text:~%%i,1!" echo !text:~%%i!
for %%j in (!sum2!) do for %%k in (!dSum!) do if "!text:~%%i,%%k!"=="硬盘!disk!" set flag=1
if "!flag!"=="1" if "!text:~%%i,1!"=="" set flag=0
)))>1.txt
echo 已经保存到当前文件夹的1.txt文件中
pause>nul
exit

如果不需要交互,自己修改的话:

:home
set /p disk=请输入硬盘编号(1-99):
for /l %%c in (1 1 99) do if "%disk%"=="%%c" goto :start
cls&echo 输入无效,请重新输入&goto :home
:start

改成:

set disk=x
rem 上边x代表数字

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