You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批处理脚本无法获取双显卡笔记本显卡信息,求解决方案及解析

双显卡笔记本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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:37:23