如何解决wmic命令输出存入变量时被空行覆盖的问题
解决WMIC获取序列号时空行覆盖变量的问题
嘿,太懂这种被WMIC输出坑到的感觉了!那些多余的空行确实会悄悄把你好不容易拿到的序列号给覆盖掉,给你两个实用的解决办法:
方法一:用For循环过滤空行捕获有效内容
直接通过for /f逐行处理输出,只把非空的内容赋值给变量:
@echo off set "serial_num=" for /f "tokens=2 delims=:" %%s in ('wmic bios get serialnumber ^| findstr /N /V SerialNumber') do ( if not "%%s"=="" set "serial_num=%%s" ) echo 提取到的序列号:%serial_num%
这里的tokens=2 delims=:是把findstr输出的行号和内容拆分,只取冒号后面的部分;再加个空值判断,就完美跳过了那些带行号的空行。
方法二:先过滤所有空行再赋值
先给原来的命令加一层空行过滤,确保输出只有有效的序列号:
@echo off for /f "delims=" %%s in ('wmic bios get serialnumber ^| findstr /V SerialNumber ^| findstr /R /V "^$"') do set "serial_num=%%s" echo 提取到的序列号:%serial_num%
第二个findstr /R /V "^$"的作用是匹配并移除完全空白的行,这样命令输出就只剩你要的序列号了,直接用for /f捕获就行。
为啥你之前的方法会失效?因为wmic本身输出就带额外的换行,再加上findstr给空行也标了行号,当你赋值时变量会被最后一行的空内容覆盖,所以必须先把这些空行过滤掉才行~
内容的提问来源于stack exchange,提问作者Ioncap
相关产品推荐
相关产品推荐

