windows - 在特定 CPU 负载下运行程序的脚本

标签 windows powershell cmd

我已经尝试了大约 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

确保更改 HighPerformanceModePowerSaverMode 以获得计算机特定的电源计划。您可以通过在 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/

相关文章:

shell - 有没有一个windows shell工具可以保存历史记录?

batch-file - 以编程方式仅删除 "%~dp0"返回的路径中的最后一个斜杠

windows - 如何创建批处理文件以重命名文件夹中的大量文件?

windows - make 不被识别为内部或外部命令 - Qt SDK - Windows

c++ - 从用户模式访问 Windows Native API

bash - 如何在 PowerShell 脚本中使用 shebang?

powershell - 从 Powershell 运行 NUnit 3

Python getpass 不适用于 Windows Git Bash (MINGW64)

如果任何列为空,Windows 批处理文件将删除 csv 文件中的那些行

powershell - 仅在嵌套循环中跳出内循环