Idea's?

Discussion forum for all Windows batch related topics.

Moderator: DosItHelp

Post Reply
Message
Author
Yamanipanuchi
Posts: 6
Joined: 17 Aug 2012 15:32

Idea's?

#1 Post by Yamanipanuchi » 17 Aug 2012 15:40

New to the forum. Was wondering if anyone had some ideas on the batch file I created.

The whole thing works, But I just have this feeling there's a better way to do this. Plus i'm looking to learn some new tricks.. :D

Essentially I am looking to get average CPU usage over a short period of time. 'wmic cpu get loadpercentage' takes about 1 second to run, So the over all batch file take about 10 seconds to run.

@echo off

wmic cpu get loadpercentage | find /n " " > load1.txt
type load1.txt | find "[2]" > load2.txt
for /f %%p in ('type load2.txt') do set prevalue=%%p
set value1=%prevalue:~3%

wmic cpu get loadpercentage | find /n " " > load1.txt
type load1.txt | find "[2]" > load2.txt
for /f %%p in ('type load2.txt') do set prevalue=%%p
set value2=%prevalue:~3%

wmic cpu get loadpercentage | find /n " " > load1.txt
type load1.txt | find "[2]" > load2.txt
for /f %%p in ('type load2.txt') do set prevalue=%%p
set value3=%prevalue:~3%

wmic cpu get loadpercentage | find /n " " > load1.txt
type load1.txt | find "[2]" > load2.txt
for /f %%p in ('type load2.txt') do set prevalue=%%p
set value4=%prevalue:~3%

wmic cpu get loadpercentage | find /n " " > load1.txt
type load1.txt | find "[2]" > load2.txt
for /f %%p in ('type load2.txt') do set prevalue=%%p
set value5=%prevalue:~3%

wmic cpu get loadpercentage | find /n " " > load1.txt
type load1.txt | find "[2]" > load2.txt
for /f %%p in ('type load2.txt') do set prevalue=%%p
set value6=%prevalue:~3%

wmic cpu get loadpercentage | find /n " " > load1.txt
type load1.txt | find "[2]" > load2.txt
for /f %%p in ('type load2.txt') do set prevalue=%%p
set value7=%prevalue:~3%

wmic cpu get loadpercentage | find /n " " > load1.txt
type load1.txt | find "[2]" > load2.txt
for /f %%p in ('type load2.txt') do set prevalue=%%p
set value8=%prevalue:~3%

wmic cpu get loadpercentage | find /n " " > load1.txt
type load1.txt | find "[2]" > load2.txt
for /f %%p in ('type load2.txt') do set prevalue=%%p
set value9=%prevalue:~3%

wmic cpu get loadpercentage | find /n " " > load1.txt
type load1.txt | find "[2]" > load2.txt
for /f %%p in ('type load2.txt') do set prevalue=%%p
set value10=%prevalue:~3%

set /a value=(%value1%+%value2%+%value3%+%value4%+%value5%+%value6%+%value7%+%value8%+%value9%+%value10%)/10

del load1.txt
del load2.txt

echo %value1%
echo %value2%
echo %value3%
echo %value4%
echo %value5%
echo %value6%
echo %value7%
echo %value8%
echo %value9%
echo %value10%
echo %value%

::if %value% lss 10 shutdown /s /t 00
pause

Ed Dyreen
Expert
Posts: 1569
Joined: 16 May 2011 08:21
Location: Flanders(Belgium)
Contact:

Re: Idea's?

#2 Post by Ed Dyreen » 17 Aug 2012 16:11

Code: Select all

@echo off &setlocal enableDelayedExpansion

set "$=" &for /l %%§ in (

       1, 1, 10

) do   set "$%%~§=" &for /f "skip=1" %%? in (

       'wmic cpu get loadpercentage'

) do   if not defined $%%~§ (

       set /a $%%~§ = %%~?
       set /a $    += %%~?
)
::
set /a $ /= 10
set   "$"

::if !$! lss 10 shutdown /s /t 00

pause
exit

Yamanipanuchi
Posts: 6
Joined: 17 Aug 2012 15:32

Re: Idea's?

#3 Post by Yamanipanuchi » 20 Aug 2012 10:15

Thanks for the quick response! Worked perfectly!

I just knew there was a better way.. Thanks again!

Ed Dyreen
Expert
Posts: 1569
Joined: 16 May 2011 08:21
Location: Flanders(Belgium)
Contact:

Re: Idea's?

#4 Post by Ed Dyreen » 20 Aug 2012 16:09

'
Hope you realize this is no good way to get load percentage will be 100% for at least one core.

This way, the load percentage is more accurate.

Code: Select all

@echo off &setlocal enableDelayedExpansion

set /a $loops = 2

echo.

for %%? in (

   "_region"

) do (
   set "%%~?.0405=cz" &set "%%~?.0414=no" &set "%%~?.080C=be"
   set "%%~?.0406=dk" &set "%%~?.0415=pl" &set "%%~?.0813=be"
   set "%%~?.0407=gr" &set "%%~?.0416=br" &set "%%~?.0816=po"
   set "%%~?.0409=us" &set "%%~?.0419=ru" &set "%%~?.0C0C=cf"
   set "%%~?.040A=sp" &set "%%~?.041A=yu" &set "%%~?.1009=us"
   set "%%~?.040B=su" &set "%%~?.041B=sl" &set "%%~?.100C=sf"
   set "%%~?.040C=fr" &set "%%~?.041D=sv" &set "%%~?.0409=dv"
   set "%%~?.040E=hu" &set "%%~?.0807=sg" &set "%%~?.040A=sp"
   set "%%~?.040F=us" &set "%%~?.0809=uk" &set "%%~?.0C0C=cf"
   set "%%~?.0410=it" &set "%%~?.080A=la" &set "%%~?.0409=us"
   set "%%~?.0413=nl"
)

for /f "skip=4 tokens=3 delims=   " %%? in (

       'reg query "HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language" /v InstallLanguage'

) do   set "_region=!_region.%%~?!"

if /i "!_region!" == "be" set "_cmd=Percentage processortijd"
if /i "!_region!" == "nl" set "_cmd=Percentage processortijd"
if /i "!_region!" == "us" set "_cmd=Processor Time"
if /i "!_region!" == "uk" set "_cmd=Processor Time"

if defined _cmd (

       for %%§ in (

              "numberOfCores"

       ) do   set "$%%~§=" &for /f "skip=1 delims=" %%? in (

              'wmic.EXE CPU'

       ) do   set /a $%%~§ += 1

       for %%§ in (

              "averageCPU"

       ) do   set "$%%~§=" &for /f "skip=2 tokens=2 delims=," %%? in (

              'typeperf.EXE "\Proces(_Total)\!_cmd!" -sc !$loops!'

       ) do   echo.%%~§: '%%~?' &2>nul set /a $%%~§ += %%~?

       set /a $averageCPU /= ( $loops + $numberOfCores )

       echo. &set "$"
)

echo.
pause
exit

Code: Select all

averageCPU: '192.187500'
averageCPU: '193.750000'

$averageCPU=96
$loops=2
$numberOfCores=2

Druk op een toets om door te gaan. . .
But now languages are a problem :x


Kind regards,
ED

Yamanipanuchi
Posts: 6
Joined: 17 Aug 2012 15:32

Re: Idea's?

#5 Post by Yamanipanuchi » 23 Aug 2012 10:29

Wow, Ya didn't expect you to look into it that far. Thanks!

I guess if you don't mind me asking, What would even work best for what I am trying to do is to check to see if a specific process "????.exe" is running. If that process isn't running I want the PC to shut down. I don't know how easily this can be done though?

Ed Dyreen
Expert
Posts: 1569
Joined: 16 May 2011 08:21
Location: Flanders(Belgium)
Contact:

Re: Idea's?

#6 Post by Ed Dyreen » 24 Aug 2012 10:01

'
Oops, I think that code is flawed something with proces(_Total) always reporting 100% or near 100%. This fixes that I guess

Code: Select all

@echo off &setlocal enabledelayedexpansion

set /a $numOfCores = 2

set "?=" &for /f "skip=2 delims=" %%? in (

       'typeperf.EXE "\Proces(*)\Percentage processortijd" -sc 1'

) do   if not defined ? (

       set "?=%%?" &set "?=!?:*,=!"
       set "$=!?!" &set "$=!?:*,=!"

       for %%? in ( "!$!" ) do set "?=!?:,%%~?=!" &set "?=!?:~1,-1!"
       for %%? in (  !$!  ) do set "$=%%~?"
)

set /a $cpu = ( $ - ? ) / $numOfCores
set ?
set $

pause
exit

Code: Select all

?=181.538462
$=200.000000
$cpu=9
$numOfCores=2
Druk op een toets om door te gaan. . .
Yamanipanuchi wrote:I guess if you don't mind me asking, What would even work best for what I am trying to do is to check to see if a specific process "????.exe" is running.
take a look at 'tasklist /?'

Post Reply