如何将wmic memorychip get SMBIOSMemoryType数值转换为名称(DDR)并输出到txt文件

how can I convert wmic memorychip get SMBIOSMemoryType numerical value to name (DDR) and output to a txt file

我目前正在编写脚本,将从 wmic 等收集的信息输出到 txt 文件或 html 文件。

我知道您可以使用命令`wmic memorychip get SMBIOSMemoryType 获取内存类型,即 DDR3、DDR4 等,它以数值显示类型,即 DDR4 为 26。

但是有没有可以编写批处理脚本来转换值以显示 DDR3/DDR4 等并将其输出到变量。

20 = DDR

21 = DDR2

22 = DDR2 FB-DIMM

24 = DDR3

26 = DDR4

我似乎无法在评论框中添加代码,所以我已将下面的代码更新为我发现的内容。

这在原则上似乎可行。

for /F "skip=1" %%E in ('
    wmic memorychip get SMBIOSMemoryType
') do for /F %%F in ("%%E") do set "FF=%%F"
if %FF% equ 26 (
    goto ramtype1
    )
if %FF% equ 24 (
    goto ramtype2
    )
if %FF% equ 21 (
    goto ramtype3
) else (
    goto ramtype4
)

:ramtype1
echo DDR4
pause
exit
:ramtype2
echo DDR3
pause
exit
:ramtype3
echo DDR2
pause
exit
:ramtype4
echo other
pause
exit

Pause

这段代码类似。

for /F "skip=1" %%E in ('
    wmic memorychip get SMBIOSMemoryType
') do for /F %%F in ("%%E") do set "FF=%%F"
if %FF% equ 26 (
    echo Ram Type is DDR4.
    if %FF% equ 24 (
    echo Ram Type is DDR4.
)
) else (
    echo Unknown
)

需要以上内容才能使用以下代码或类似代码。

if /i %opt%==1 echo !CODE HERE! >> "..\NCR_STAGING_LOGS\ASDA%STORENAME%%serial% %MAC%".html

可惜没怎么看

我通常会使用下面的方法来获取 wmic 信息并将其传递给 %variable%,例如下面的 %Memtype%,但这显然会输出 26 作为 DDR4。

set torun=wmic memorychip get SMBIOSMemoryType
for /f "tokens=2 delims==" %%a in ('%torun%') do set MemType=%%a

我有一个解决方案,看起来对吗?

此代码似乎有效并将我的 ram 输出为 DDr4

for /F "skip=1" %%E in ('
    wmic memorychip get SMBIOSMemoryType
') do for /F %%F in ("%%E") do set "FF=%%F"
if %FF% equ 26 (
    echo Ram Type is DDR4.)>"myNewTextFile.txt"
if %FF% equ 24 (
    echo Ram Type is DDR3.)>"myNewTextFile.txt"
if %FF% equ 21 (
    echo Ram Type is DDR2.)>"myNewTextFile.txt"

)
)
) else (
    echo Unknown 
)>"myNewTextFile.txt"

[编辑/]

 (
        If %FF% Equ 26 (
            Echo Ram Type is DDR4.
        ) Else If %FF% Equ 24 (
            Echo Ram Type is DDR3.
        ) Else If %FF% Equ 21 (
            Echo Ram Type is DDR2.
        ) Else Echo Unknown
    ) 1>"myNewTextFile.txt"

试过上面的单行代码 但即使它有效,它也会破坏下面的其余代码。

这就是我正在使用的。

if /i %opt%==1 for /F "skip=1" %%E in ('
    wmic memorychip get SMBIOSMemoryType
') do for /F %%F in ("%%E") do set "FF=%%F"
(
    If %FF% Equ 26 (
        Echo Ram Type is DDR4.
    ) Else If %FF% Equ 24 (
        Echo Ram Type is DDR3.
    ) Else If %FF% Equ 21 (
        Echo Ram Type is DDR2.
    ) Else Echo Unknown
) 1>"myNewTextFile.txt"

在我的批处理文件中,我有一个菜单系统使用 if /i %opt%==1if /i %opt%==10 当我从菜单中 select 选项二时上面的代码中断。

[Edit2 /]

If "%opt:"=%" == "1" (
    For /F "Skip=1" %%E In (
        'WMIC MemoryChip Get SMBIOSMemoryType'
    ) Do For /F %%F In (
        "%%E"
    ) Do Set "FF=%%F"
    (
        If %FF% Equ 26 (
            Echo Ram Type is DDR4.
        ) Else If %FF% Equ 24 (
            Echo Ram Type is DDR3.
        ) Else If %FF% Equ 21 (
            Echo Ram Type is DDR2.
        ) Else Echo Unknown
    ) 1>"myNewTextFile.txt"
)

这是在 中使用的单行示例,它使用您指定的 SMBIOSMemoryType 属性、(仅在 Windows 10/服务器 2016+).

(For %%G In ("1=DDR" "2=DDR2" "4=DDR3" "6=DDR4") Do Set "_2%%~G") & For /F EOL^=S %%H In ('%SystemRoot%\System32\wbem\WMIC.exe MemoryChip Where "SMBIOSMemoryType='20' Or SMBIOSMemoryType='21' Or SMBIOSMemoryType='24' Or SMBIOSMemoryType='26'" Get SMBIOSMemoryType 2^>NUL') Do For %%I In (%%H) Do For /F %%J ('%SystemRoot%\System32\cmd.exe /V /D /C "Echo(!_%%I!") Do Echo(%%J

另请注意,您的初始 查询将输出与安装的记忆棒数量相同的结果。如果您不希望这样,则必须根据需要自行修改代码,因为这样做超出了将 uint32 数据类型结果替换为各自字符串的请求范围。