来自 wmic 的批处理文件集变量

Batch file set variable from wmic

目前我正在尝试将内存的速度值放入 var 中,就像这样

for /f "tokens=2 delims==" %%f in ('wmic memorychip get speed /value ^| find "="') do (set msp=%%f)
echo %msp%

但它从不将值传递给变量。如果我这样做

for /f "tokens=2 delims==" %%f in ('wmic memorychip get speed /value ^| find "="') do (echo %%f)

它将回显出正确的值。为什么这不将值存储到变量中?

您希望在 for 循环中更改 msp 的值后,在 for 循环外访问它的值。在这种情况下,您可能需要将变量扩展到它们的 运行 时间值而不是解析时间值。试试这个:

setlocal EnableDelayedExpansion
for /f "tokens=2 delims==" %%f in ('wmic memorychip get speed /value ^| find "="') do (set msp=%%f)
echo !msp!

试试这个:

在命令行中:

@for /f "tokens=2 delims==" %f in ('%__APPDIR__%\wbem\wmic.exe memorychip get speed /value ^|find/v " "')do @set "msp=%~f" && call echo/%msp%

在bat/cmd行:

@echo off && setlocal EnableDelayedExpansion

set "_get_freq_mem=%__APPDIR__%\wbem\wmic.exe memorychip get speed /value"
for /f "tokens=2*delims== " %%f in ('"!_get_freq_mem!^|%__APPDIR__%findstr.exe ."
')do set "_msp=%%f" && call set "_msp=!_msp: =!" && echo/!_msp!
%__APPDIR__%timeout.exe -1 && endlocal & goto :EOF

根据我最近的评论,以下内容旨在 return 您系统中最慢的记忆棒速度。

@Set "MSp=9999"&For /F EOL^=S %%G In (
    '""%__AppDir__%wbem\wmic.exe" MemoryChip Get Speed 2>NUL"')Do @(
    SetLocal EnableDelayedExpansion
    If 1%%G Lss 1!MSp! (EndLocal&Set /A MSp=%%G 2>NUL)Else EndLocal)
@Set MSp&Pause

包含最后一行用于演示目的。我使用 9999 作为初始值,因为我们不太可能在几年内拥有这些速度的记忆棒,(目前我认为最快的是 5000,没有人可以证明他们的成本!)