Bat文件中无法拼接WMIC命令输出与字符串的问题求助
批处理脚本获取主板序列号并写入文件失败的解决方法
你的脚本出现HOST_MAC=空值的问题,主要有两个原因:
- WMIC命令输出是Unicode编码,FOR /F处理时会生成多余的空行,循环最后一次会把
var覆盖为空行 - 没有过滤掉WMIC输出的表头行(
SerialNumber)
以下是修正后的脚本,同时满足你预期的带引号格式:
@echo off setlocal enabledelayedexpansion :: 获取主板序列号:跳过表头,过滤空行 FOR /F "tokens=* skip=1 USEBACKQ" %%F IN (`wmic baseboard get serialnumber ^| findstr /r /v "^$"`) DO ( set "var=%%F" goto :end_serial_loop :: 获取到有效数据后立即跳出循环,避免空行覆盖 ) :end_serial_loop :: 拼接成预期格式(带引号) set "host_mac=HOST_MAC="!var!"" :: 写入目标文件 echo !host_mac! > "C:\Users\Dell\Desktop\execution.txt" pause endlocal
关键改动说明
skip=1:跳过WMIC输出的第一行表头SerialNumber,直接读取序列号内容^| findstr /r /v "^$":通过管道过滤掉Unicode转码产生的空行,确保只处理有效数据行goto :end_serial_loop:获取到第一行有效序列号后终止循环,避免后续空行覆盖变量值- 给序列号添加双引号,完全匹配你预期的
HOST_MAC="OUTPUT_OF_COMMAND"格式 setlocal enabledelayedexpansion:确保变量在循环外部能正确读取(如果不需要延迟扩展,也可以把!var!换成%var%,因为已经跳出了循环)
内容的提问来源于stack exchange,提问作者AEM
相关产品推荐
相关产品推荐

