批处理脚本中的 WMIC 输出

问题描述 投票:0回答:1

这非常简单,但经过多次谷歌搜索和实验后,我找不到答案。 我将以此作为示例,然后我可以将其应用到我正在编写的其他脚本中。 当我运行这个命令时

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

我明白了:

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

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

如有任何帮助,我们将不胜感激

wmic
1个回答
0
投票

使用带有 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 循环可以避免这种错误的线路终止问题。

要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。

  • echo /?
  • endlocal /?
  • for /?
  • setlocal /?
  • wmic /?
  • wmic cpu /?
  • wmic cpu get /?
© www.soinside.com 2019 - 2024. All rights reserved.