我已经尝试了大约 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 中完成。
感谢您的帮助!
编辑:
感谢@lit 提供的代码,这是我最终完美运行的代码:
:: 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 中执行 powercfg -list
来找到代码。
然后我制作了一个单独的短脚本,其中只有 "C:\Load Batch\Load Batch.bat"
,但您必须将其更改为主脚本所在的位置。然后我使用了一个名为“BAT to EXE converter”的程序并将其置于Ghost Mode,并将新制作的.exe程序放入我的启动文件夹中。
编辑 2:
我不认为我的问题是重复的,链接的问题是关于获取 CPU 和 RAM 的使用情况,似乎只是为了查看它,而我的问题是关于将负载百分比作为纯文本形式获取到在脚本中使用。我知道它只测试一个 CPU 核心,但随着一个核心的增加,很可能其他核心也有类似的负载。我在该网站上搜索了在运行 wmic cpu get loadpercentage
时分隔“LoadPercentage”文本的代码,因为我无法以这种方式将其设置为变量。
最佳答案
问题很可能是 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%%%
关于windows - 在特定 CPU 负载下运行程序的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44752022/