在某个CPU负载下运行程序的脚本

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

格式只是不允许它被放入一个variables,所以我不能检查它的任何东西。 最好,我希望在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到EXE转换器”的程序,并将其放入Ghost模式,并将新创build的.exe程序放入我的启动文件夹中。

编辑2:

我不认为我的问题是重复的,链接的问题是获取CPU和RAM的使用,看起来只是为了查看它,而我的问题是关于获取作为纯文本forms的负载百分比用于一个脚本。 我知道它只是testing一个CPU核心,但是随着一个CPU核心的上升,很可能其他CPU的负载相似。 我已经search了这个网站的代码,当wmic cpu get loadpercentage运行时,会分离出“LoadPercentage”文本,因为我无法将其设置为一个variables。

Solutions Collecting From Web of "在某个CPU负载下运行程序的脚本"

问题很可能是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%%% 

虽然写入(临时)文件并用set /p读取它是一种可行且有效的方法,但是将命令的输出转换为cmd的变量的常用方法是for /f循环:

 for /f "" %%a in ('wmic cpu get loadpercentage /value ^|find "="') do set /a "%%a" echo %loadpercentage% 

正如在答案中, find (或findstr )命令用于将wmic的Unicode输出转换为“cmd兼容”格式。
我使用/value参数来获取输出格式,这个输出格式更容易解析并set /a来获取数值(不需要混淆空格)。

使用/value的好处在于,您可以从同一个wmic命令轻松获取多个参数:

 for /f "delims=" %%a in ('"wmic cpu get Caption,CurrentClockSpeed,ExtClock,L2CacheSize /value |findstr = "') do set "_%%a" set _ 

将完整的命令括在引号中,不需要转义特殊字符。 当然这只适用于你,如果你不需要在命令字符串本身的引号。

(不含引号:

 for /f "delims=" %%a in ('wmic cpu get Caption^,CurrentClockSpeed^,ExtClock^,L2CacheSize /value ^|findstr = ') do set "_%%a"