标题: [系统相关] 【已解决】tasklist 如何关闭最小的explorer.exe [打印本页]
作者: xp3000 时间: 2021-4-22 15:55 标题: 【已解决】tasklist 如何关闭最小的explorer.exe
本帖最后由 xp3000 于 2021-4-22 23:08 编辑
假如系统一直弹explorer.exe多个,以大小顺序排列,设定允许几个运行,范围外最小的几个监控到立刻关闭
作者: 路过 时间: 2021-4-22 16:18
我用的WIN10系统,打开了多个文件管理器,explorer.exe进程也只有一个。
另外结束进程用的是taskkill,而不是tasklist
作者: 路过 时间: 2021-4-22 16:56
进程explorer.exe如果有多个的话,用以下代码
根据需求自己修改变量pmax和per的值- @echo off
- setlocal enabledelayedexpansion
-
- ::要检测的进程名
- set pro=explorer.exe
-
- ::最多允许多少个进程同时运行
- set pmax=100
-
- ::检测周期,单位秒,默认一分钟
- set per=60
-
- :jiance
- set/a cnt=0
- echo;正在检测%pro%...
-
- ::mid数组存放进程的pid,mem数组存放进程占用的内存
- for /f "tokens=1-5" %%a in ('tasklist^|find /i "%pro%"') do (
- set/a cnt+=1
- set mid!cnt!=%%b
- set mem=%%e
- set mem=!mem:,=!
- set mem!cnt!=!mem!
- )
-
- :shengxu 升序排列,占用内存最小的几个就在前面。
- set/a px=0
- for /l %%a in (1,1,%cnt%) do (
- if %%a neq %cnt% (
- set/a q=%%a+1
- for /f %%b in ("!q!") do (
- set/a q1=!mem%%a!,q2=!mem%%b!,q3=!mid%%a!
- if !q1! gtr !q2! (
- set/a px+=1,t=q1,mid%%a=!mid%%b!
- set/a mem%%a=q2,mem%%b=t,mid%%b=q3
- )
- )
- )
- )
- if %px% neq 0 (goto shengxu)
-
- ::去除超过pmax的进程
- if %cnt% gtr %pmax% (
- set/a q=cnt-pmax
- for /l %%a in (1,1,!q!) do (
- taskkill /f /fi "PID eq !mid%%a!" /im %pro%
- )
- )
-
- echo;休息中...
- for /f "delims==" %%a in ('set m') do (set "%%a=")
- ping/n %per% 127.0>nul
- goto jiance
复制代码
作者: xp3000 时间: 2021-4-22 17:41
本帖最后由 xp3000 于 2021-4-22 17:42 编辑
谢谢解答,但是代码不能关闭explorer,还会产生大量cmd.exe和find- @echo off&setlocal enabledelayedexpansion
- set f=explorer.exe
- for /f "tokens=1,2,5,6* delims=, " %%a in ('tasklist /fo csv^|findstr /i /c:"!f!"') do (
- set PID=%%b&set size=%%c%%d&set size=!size:^"=!&set str=!f! PID=!PID:~1,-1! 大小 !size!
-
- (set n=sort /+1 !size!
- for /f "tokens=1,2,3,4,5 delims== " %%i in ('echo !str!^|findstr /r "!n!" ') do (
- echo %%i 大小=%%m PID=%%k
- ))
- )
- pause
复制代码
得到结果是,无法大小排序
explorer.exe 大小=106224 PID=1628
explorer.exe 大小=20608 PID=7976
explorer.exe 大小=20560 PID=2528
explorer.exe 大小=20596 PID=9300
explorer.exe 大小=20640 PID=8224
explorer.exe 大小=20664 PID=16676
explorer.exe 大小=20680 PID=12544
explorer.exe 大小=20908 PID=9388
explorer.exe 大小=20764 PID=6484
explorer.exe 大小=20864 PID=7820
explorer.exe 大小=20920 PID=14460
explorer.exe 大小=21028 PID=7448
explorer.exe 大小=21056 PID=9644
explorer.exe 大小=20892 PID=14572
explorer.exe 大小=21016 PID=5572
explorer.exe 大小=21036 PID=8388
explorer.exe 大小=21008 PID=8940
explorer.exe 大小=20976 PID=14844
explorer.exe 大小=21228 PID=10316
explorer.exe 大小=21044 PID=10636
作者: 路过 时间: 2021-4-22 18:23
应该是读取进程PID和大小时出的问题- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1-5" %%a in ('tasklist^|find /i "explorer.exe"') do (
- echo;explorer.exe 大小=%%e PID=%%b
- )
- pause
- exit
复制代码
你试试上面的代码,看能否得到explorer.exe正确的PID和大小。不能就是读取的问题。
作者: 路过 时间: 2021-4-22 18:32
回复 4# xp3000
sort是按字符大小排序,并不是数值大小排序。
9和82用sort排序的话得到的是9,82。
在你得到的explorer.exe大小里有的是5位数,有的是6位数,需全部统一成6位数,只需在5位数的前面加个0即可
并且还要sort /+合适的n 才能得到正确的排序结果。
作者: xp3000 时间: 2021-4-22 23:00
谢谢了,
很奇怪,第一论无效N次,关闭电脑打开又能用了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |