批处理脚本获取HDD/SSD信息报错,求修正方案
批处理脚本修正:解决HDD/SSD容量获取报错问题
报错根源
- WMIC语法错误:
where子句的条件未用双引号包裹,导致drivetype=3/drivetype=2被解析为无效命令,触发Invalid alias verb错误 - 未初始化变量:若系统中无对应类型磁盘,变量为空会导致
set /a命令抛出Missing operand错误 - 逻辑缺陷:原脚本会覆盖同类型多磁盘的容量值,无法正确计算总容量
修正后的完整脚本
@echo off setlocal enabledelayedexpansion echo Processor: wmic cpu get name echo. echo RAM: set /a ram=0 for /f "tokens=2 delims==" %%i in ('wmic memorychip get capacity /value ^| find "Capacity"') do set /a ram+=%%i set /a ramgb=%ram%/1024/1024/1024 echo %ramgb% GB echo. echo Motherboard: wmic baseboard get product,manufacturer echo. echo HDD (Drivetype=3): set /a hddtotal=0 set /a hddfree=0 for /f "tokens=2 delims==" %%a in ('wmic logicaldisk where "drivetype=3" get size /value ^| find "Size"') do ( set /a hddtotal+=%%a ) for /f "tokens=2 delims==" %%a in ('wmic logicaldisk where "drivetype=3" get freespace /value ^| find "FreeSpace"') do ( set /a hddfree+=%%a ) if !hddtotal! gtr 0 ( set /a hddsizegb=!hddtotal!/1024/1024/1024 set /a hddfreegb=!hddfree!/1024/1024/1024 echo Total Size: !hddsizegb! GB echo Total Free Space: !hddfreegb! GB ) else ( echo No HDD detected. ) echo. echo SSD (Drivetype=2): set /a ssdtotal=0 set /a ssdfree=0 for /f "tokens=2 delims==" %%a in ('wmic logicaldisk where "drivetype=2" get size /value ^| find "Size"') do ( set /a ssdtotal+=%%a ) for /f "tokens=2 delims==" %%a in ('wmic logicaldisk where "drivetype=2" get freespace /value ^| find "FreeSpace"') do ( set /a ssdfree+=%%a ) if !ssdtotal! gtr 0 ( set /a ssdsizegb=!ssdtotal!/1024/1024/1024 set /a ssdfreegb=!ssdfree!/1024/1024/1024 echo Total Size: !ssdsizegb! GB echo Total Free Space: !ssdfreegb! GB ) else ( echo No SSD detected. ) echo. pause endlocal
核心修改说明
- 给WMIC的
where条件添加双引号:where "drivetype=3"/where "drivetype=2",修复语法解析错误 - 启用
enabledelayedexpansion,支持循环内变量的动态累加计算 - 初始化容量累加变量,避免空值导致的计算报错
- 添加磁盘存在性判断,无对应磁盘时显示明确提示,而非空容量信息
- 修改为累加同类型所有磁盘的总容量,解决多磁盘场景下的数值覆盖问题
内容的提问来源于stack exchange,提问作者visshnu
相关产品推荐
相关产品推荐

