批处理脚本无法获取双显卡笔记本显卡信息,求解决方案及解析
双显卡笔记本WMI显卡信息读取问题解决
问题场景
单显卡笔记本可正常读取视频图形信息,但双显卡(Intel+Nvidia)笔记本下读取失败。
在命令提示符执行以下命令:
wmic.exe path Win32_VideoController get CurrentHorizontalResolution^, CurrentVerticalResolution^, Name^ /^format:value
得到输出:
CurrentHorizontalResolution= CurrentVerticalResolution= Name=NVIDIA Quadro M1000M CurrentHorizontalResolution=1920 CurrentVerticalResolution=1080 Name=Intel(R) HD Graphics 530
我的批处理代码如下:
set cmdlin="%SystemRoot%\System32\wbem\wmic.exe path Win32_VideoController get CurrentHorizontalResolution^,CurrentVerticalResolution^,Name^/format:value" for /F "tokens=2-4 delims== skip=2" %%i in ('%cmdlin%') do ( for /F %%j in ("%%i") do ( set VresH=%%i set VresV=%%j set Vname=%%k ECHO Res.H: %VresH% - Res.V:%VresV% - Graphics: %Vname% ) )
尝试多种echo方式均失败,开启echo on可见变量已赋值但无法显示,需解决该问题并解析错误,尤其是带空格字段的处理。
错误分析
- 延迟环境变量扩展缺失:批处理中
%VresH%这类变量是即时扩展,for循环内赋值后,echo调用的仍是循环开始前的空值——整个for块在执行前就完成了变量解析。 - WMIC输出格式问题:WMIC输出为Unicode格式,直接用
for读取会产生多余空行和隐藏字符,导致解析逻辑混乱。 - tokens与delims逻辑错误:原代码
tokens=2-4 delims==的拆分逻辑不匹配Key=Value的单行格式,且带空格的显卡名称会被错误拆分。 - 嵌套for逻辑冗余:内层
for /F %%j in ("%%i")完全没必要,反而会破坏带空格的字段内容。
解决代码
@echo off setlocal enabledelayedexpansion set "cmdlin=%SystemRoot%\System32\wbem\wmic.exe path Win32_VideoController get CurrentHorizontalResolution,CurrentVerticalResolution,Name /format:value" :: 过滤WMIC输出的空行,同时处理Unicode转码的隐藏字符 for /F "delims=" %%a in ('%cmdlin% ^| findstr /r /v "^$"') do ( :: 拆分每行的Key=Value对,%%c保留完整值(含空格) for /F "tokens=1,* delims==" %%b in ("%%a") do ( if "%%b"=="CurrentHorizontalResolution" set "VresH=%%c" if "%%b"=="CurrentVerticalResolution" set "VresV=%%c" if "%%b"=="Name" ( set "Vname=%%c" :: 用!变量!读取实时赋值的内容 ECHO Res.H: !VresH! - Res.V:!VresV! - Graphics: !Vname! :: 重置变量,避免下一张显卡继承旧值 set "VresH=" set "VresV=" ) ) ) endlocal
关键修正点
- 启用延迟变量扩展:通过
setlocal enabledelayedexpansion开启,用!变量!替代%变量%,确保循环内赋值的变量能实时读取。 - 处理WMIC输出:用
findstr /r /v "^$"过滤空行,for /F会自动处理Unicode转ANSI时产生的隐藏字符。 - 正确拆分Key-Value:用
tokens=1,* delims==拆分每行,%%c保留完整的字段值(包括空格),避免显卡名称被拆分。 - 按显卡分组输出:读取到
Name字段时输出当前显卡的完整信息,并重置变量,适配多显卡场景。
内容的提问来源于stack exchange,提问作者calade
相关产品推荐
相关产品推荐

