批处理脚本中的 WMIC 输出

问题描述

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

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

我明白了:

姓名
Intel(R) Core(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 编码输出时出现问题,而是将带有两个回车和换行的数据写入文本文件只是回车+换行。使用两个 FOR /F 循环可以避免这种错误的行终止问题。

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

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