Batch脚本格式化输出设备厂商与型号的实现求助
解决Batch脚本输出硬件厂商和型号的格式化问题
修正后的脚本
@echo off setlocal enabledelayedexpansion :: 获取厂商名称 set "vendor=" for /f "skip=1 tokens=*" %%i in ('wmic csproduct get vendor') do ( set "line=%%i" :: 去除WMIC输出末尾的多余回车字符 set "vendor=!line:~0,-1!" goto :getVendorDone ) :getVendorDone echo Vendor: %vendor% :: 获取产品型号 set "model=" for /f "skip=1 tokens=*" %%j in ('wmic csproduct get name') do ( set "line=%%j" set "model=!line:~0,-1!" goto :getModelDone ) :getModelDone echo Name: %model% pause endlocal
关键修改说明
- 跳过表头行:使用
skip=1参数让for循环忽略WMIC输出的第一行(也就是Vendor/Name表头),避免把表头内容混入结果。 - 处理WMIC特殊输出:WMIC命令输出为UTF-16编码,转成ANSI后每行末尾会多出一个无效回车字符,通过
!line:~0,-1!截断最后一个字符消除该问题。 - 提前终止循环:
wmic csproduct只会返回一行有效数据(除表头和空行),用goto跳出循环避免无效遍历。
简化写法(利用findstr过滤空行)
@echo off for /f "skip=1 tokens=*" %%i in ('wmic csproduct get vendor ^| findstr /v "^$"') do echo Vendor: %%i for /f "skip=1 tokens=*" %%j in ('wmic csproduct get name ^| findstr /v "^$"') do echo Name: %%j pause
这种写法通过findstr /v "^$"过滤WMIC输出中的空行,配合skip=1跳过表头,同样能得到干净的目标输出。
内容的提问来源于stack exchange,提问作者Peti
相关产品推荐
相关产品推荐

