我已经尝试过3个小时了,有多个代码与此相似:
wmic cpu get loadpercentage > Load.txt
findstr "%random:~,1%" Load.txt > Load1.txt
set load=<Load1.txt
if %load%==" 2 7 " echo yes
pause
但他们都遇到了类似的问题,wmic cpu get loadpercentage
的输出:
LoadPercentage
56
格式不允许将其放入变量中,因此我无法检查它是否有任何变化。最好,我希望它可以在Windows CMD和/或Powershell中完成。
感谢您的帮助!
:: To find the "GUID" or the codes for each power plan, run the command in CMD "powercfg -list".
set HighPerformanceMode=8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
set PowerSaverMode=a1841308-3541-4fab-bc81-f71556f20b4a
:loop
SETLOCAL ENABLEDELAYEDEXPANSION
SET "load="
FOR /F "usebackq skip=1 tokens=*" %%f IN (`wmic cpu get loadpercentage`) DO (
IF "!load!" EQU "" (
set "load=%%~f"
)
)
if "%load%" geq "65" (
ping localhost -n 2 >nul
if "%load%" geq "65" (
%systemroot%\System32\powercfg.exe /setactive %HighPerformanceMode%
)
) else (
if "%load%" lss "25" (
ping localhost -n 2 >nul
if "%load%" lss "25" (
%systemroot%\System32\powercfg.exe /setactive %PowerSaverMode%
)
)
)
endlocal
ping localhost -n 3 > nul
goto loop
确保更改HighPerformanceMode
和PowerSaverMode
以获得计算机特定的电源计划。您可以在cmd。{/ p>中执行powercfg -list
来查找代码
然后我创建了一个单独的短脚本,其中只有"C:\Load Batch\Load Batch.bat"
,但您必须将其更改为主脚本所在的位置。然后我使用了一个名为&#34; BAT to EXE converter&#34;并将其置于Ghost模式,并将新制作的.exe程序放入我的启动文件夹中。
我不相信我的问题是重复的,链接的问题是关于获取CPU和RAM用于看起来只是为了查看它,而我的问题是关于将负载百分比作为纯文本要在脚本中使用的表单。我知道它只测试一个CPU核心,但随着一个上升,其他人很可能有类似的负载。我在这个网站上搜索了可以分离&#34; LoadPercentage&#34;运行wmic cpu get loadpercentage
时的文本,因为我无法将其设置为变量。
答案 0 :(得分:2)
问题可能是wmic
输出是Unicode。如何使用PowerShell?
Get-CimInstance -ClassName CIM_Processor | select LoadPercentage
我不确定需要运行什么。
cmd
shell程序员的典型后备通常类似于:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "X="
FOR /F "usebackq skip=1 tokens=*" %%f IN (`wmic cpu get loadpercentage`) DO (
IF "!X!" EQU "" (
set "X=%%~f"
)
)
ECHO X is %X%
修改强>
实际上,每个核心都会有一个LoadPercentage。你可能想要它们的算术平均值(平均值)。
Get-CimInstance -ClassName CIM_Processor |
Measure-Object -Property LoadPercentage -Average |
Select Average
在cmd脚本中执行此操作将涉及将LoadPercentage值相加并除以它们的计数。
SET /A TOTAL=0
SET /A CORE_COUNT=0
FOR /F "usebackq skip=1" %%t IN (`type NUL ^| wmic /node:"%SERVER_NAME%" cpu get loadpercentage ^| findstr .`) DO (
IF "%%t" NEQ "" (
SET /A TOTAL=!TOTAL! + %%t
)
SET /A CORE_COUNT=!CORE_COUNT! + 1
)
SET /A AVG_UTILIZATION=%TOTAL% / %CORE_COUNT%
ECHO Number of cores: %CORE_COUNT%
ECHO Total CPU utilisation: %TOTAL%
ECHO Average CPU utilisation: %AVG_UTILIZATION%%%
答案 1 :(得分:0)
尽管写入(临时)文件并使用set /p
读取它是一种可行且有效的方法,但将命令输出到cmd
中的变量的常用方法是{ {1}}循环:
for /f
与for /f "" %%a in ('wmic cpu get loadpercentage /value ^|find "="') do set /a "%%a"
echo %loadpercentage%
的答案一样,lit
(或find
)命令用于将findstr
的Unicode输出转换为&#34; cmd兼容&# 34;格式。
我使用wmic
参数来获取更易于解析的输出格式,并使用/value
来获取数值(无需弄乱空格)。
使用set /a
的好处是,您可以轻松地从同一/value
命令中获取多个参数:
wmic
用引号括起完整的命令,无需转义特殊字符。当然,只有在命令字符串本身不需要引号时,这才有效。
(不引用:
for /f "delims=" %%a in ('"wmic cpu get Caption,CurrentClockSpeed,ExtClock,L2CacheSize /value |findstr = "') do set "_%%a"
set _
)