批处理脚本提取diskpart中Volume容量与可用空间两行输出的问题
解决批处理提取diskpart指定行的问题
直接提取目标行的最简方案
如果你只需要输出包含Volume Capacity和Volume Free Space的两行,不需要复杂的行数计算,直接让findstr精确匹配这两个字符串即可:
@echo off setlocal ( echo sel vol c echo detail vol echo exit ) | diskpart.exe | findstr /c:"Volume Capacity" /c:"Volume Free Space" endlocal
原脚本的问题分析
你之前的脚本逻辑存在错误:
for /F %%e IN ('...findstr "Volume"')会逐行读取findstr的输出,但默认按空格/制表符拆分内容,将每行的第一个元素(比如Volume)赋值给%%e,而非统计行数。set /a lines=%%e试图将字符串转成数字计算,会直接报错,导致lines变量无法正确赋值,后续的startLine计算自然也无效。
可选:将结果保存到变量(如需后续处理)
如果需要把这两行内容存到变量里供后续使用,可以用带延迟扩展的for /F循环:
@echo off setlocal enabledelayedexpansion set "volCapacity=" set "volFreeSpace=" for /F "tokens=*" %%a IN ('(echo sel vol c^&echo detail vol^&echo exit^) ^| diskpart.exe') do ( rem 跳过空行 if "%%a"=="" goto :nextLine rem 匹配容量行 echo %%a | findstr /c:"Volume Capacity" >nul && set "volCapacity=%%a" rem 匹配可用空间行 echo %%a | findstr /c:"Volume Free Space" >nul && set "volFreeSpace=%%a" :nextLine ) echo 磁盘容量:!volCapacity! echo 可用空间:!volFreeSpace! endlocal
内容的提问来源于stack exchange,提问作者SmplJohn
相关产品推荐
相关产品推荐

