Переменная набора файлов из wmic - PullRequest
0 голосов
/ 02 апреля 2020

В настоящее время я пытаюсь получить значение скорости памяти в переменную, например, так:

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)

, это отобразит правильное значение. Почему это не сохраняет значение в переменной?

Ответы [ 3 ]

1 голос
/ 02 апреля 2020

Попробуйте:

В командной строке:

@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
1 голос
/ 02 апреля 2020

Исходя из моего недавнего комментария, следующее предназначено для возврата наименьшей скорости памяти в вашей системе.

@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, и никто не может оправдать их стоимость!)

0 голосов
/ 02 апреля 2020

Вы получите sh для доступа к значению msp за пределами для l oop после того, как оно было изменено в течение для l oop. В этом случае вам, возможно, потребуется расширить переменные до их значений времени выполнения, а не значений времени анализа. Попробуйте это:

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