问题描述
这很简单,但经过大量的谷歌搜索和试验后,我找不到答案。 我将以此为例,然后我可以将它应用到我正在编写的其他脚本中。 当我运行此命令时
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 /?