批处理脚本中的 WMIC 输出

WMIC output in a batch script

这很简单,但经过大量谷歌搜索和试验后,我找不到答案。 我将以此为例,然后将其应用到我正在编写的其他脚本中。 当我运行这个命令

wmic cpu get name > C:\Temp\PCINFO_TEMp\core.txt

我明白了:

姓名
英特尔(R) 酷睿(TM) i5-10310U CPU @ 1.70GHz

有没有办法在不获取名称的情况下获取英特尔信息? 我试过 Findstr 并找到它,但它不起作用。

感谢任何帮助

使用带有 BOM(字节顺序标记)的 UTF-16 LE 编码的 WMIC 的 Unicode 输出可以用两个 FOR 循环过滤将需要的数据写入 ASCII 编码的文本文件。

@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "delims=" %%I in ('%SystemRoot%\System32\wbem\wmic.exe CPU GET Name /VALUE') do for /F "tokens=2 delims==" %%J in ("%%I") do >"C:\Temp\PCINFO_TEMP\core.txt" echo %%~J
endlocal

如下仅使用一个 FOR 循环并不能真正起作用。

for /F "tokens=2 delims==" %%I in ('%SystemRoot%\System32\wbem\wmic.exe CPU GET Name /VALUE') do >"C:\Temp\PCINFO_TEMP\core.txt" echo %%I

原因是Windows命令处理器在处理WMIC的UTF-16编码输出时出现问题,并且会用两个回车符写入数据returns 和文本文件中的换行符,而不是回车 return + 换行符。通过使用两个 FOR /F 循环可以避免这种错误的线路终止问题。

要了解使用的命令及其工作原理,请打开 command prompt window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • echo /?
  • endlocal /?
  • for /?
  • setlocal /?
  • wmic /?
  • wmic cpu /?
  • wmic cpu get /?