[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 如下bat脚本有bug 如何修正

本帖最后由 ditto 于 2013-3-22 14:28 编辑

当a.exe程序占内存>300M时杀掉该进程,并重启该进程

for /F "skip=3 tokens=2,3,4,5" %%i in ('tasklist /fi "IMAGENAME eq a.exe"  /fi "memusage gt 300000" ') do  taskkill /F /PID %%i && start a.exe


但是tasklist的"会话名"列可能空,也可能不空。
也就是内存的列实际可能在第4列,也可能在第5列,
如何修正上面bat的bug呢?

tasklist看到的情况可能是(会话名列不空)::

映像名称                PID                会话名               会话#                  内存使用
=============  ========  ================  ===========  ============
a.exe                       3960                RDP-Tcp#82                 1                          4,184 K


tasklist看到的情况也可能是(会话名列空):

映像名称                PID                会话名               会话#                  内存使用
=============  ========  ================  ===========  ============
a.exe                             2816                                                     0            85,332 K

"memusage gt 300000"是占用的内存原来...我拆知道,学习了..你可以在用给一个for和findstr判断下啊....是在哪一行
活着就是为了改变世界

TOP

taskkill 已有相关参数,以下为帮助信息:
  1. TASKKILL [/S system [/U username [/P [password]]]]
  2.          { [/FI filter] [/PID processid | /IM imagename] } [/F] [/T]
  3. 描述:
  4.     这个命令行工具可用来结束至少一个进程。
  5.     可以根据进程 id 或图像名来结束进程。
  6. 参数列表:
  7.     /S    system           指定要连接到的远程系统。
  8.     /U    [domain\]user    指定应该在哪个用户上下文
  9.                            执行这个命令。
  10.     /P    [password]       为提供的用户上下文指定
  11.                            密码。如果忽略,提示输入。
  12.     /F                     指定要强行终止
  13.                            进程。
  14.     /FI   filter           指定筛选进或筛选出查询的
  15.                            的任务。
  16.     /PID  process id       指定要终止的进程的
  17.                            PID。
  18.     /IM   image name       指定要终止的进程的
  19.                            图像名。通配符 '*'
  20.                            可用来指定所有图像名。
  21.     /T                     Tree kill: 终止指定的进程
  22.                            和任何由此启动的子进程。
  23.     /?                     显示帮助/用法。
  24. 筛选器:
  25.     筛选器名      有效运算符                有效值
  26.     -----------   ---------------           --------------
  27.     STATUS        eq, ne                    运行 | 没有响应
  28.     IMAGENAME     eq, ne                    图像名
  29.     PID           eq, ne, gt, lt, ge, le    PID 值
  30.     SESSION       eq, ne, gt, lt, ge, le    会话编号
  31.     CPUTIME       eq, ne, gt, lt, ge, le    CPU 时间,格式为
  32.                                             hh:mm:ss。
  33.                                             hh - 时,
  34.                                             mm - 钟,ss - 秒
  35.     MEMUSAGE      eq, ne, gt, lt, ge, le    内存使用,单位为 KB
  36.     USERNAME      eq, ne                    用户名,格式为
  37.                                             [domain\]user
  38.     MODULES       eq, ne                    DLL 名
  39.     SERVICES        eq, ne                    服务名
  40.     WINDOWTITLE     eq, ne                    窗口标题
  41. 注意: 只有带有筛选器的情况下,才能跟 /IM 切换使用通配符 '*'。
  42. 注意: 远程进程总是要强行终止,
  43.       不管是否指定了 /F 选项。
  44. 例如:
  45.     TASKKILL /S system /F /IM notepad.exe /T
  46.     TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
  47.     TASKKILL /F /IM notepad.exe /IM mspaint.exe
  48.     TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
  49.     TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
  50.     TASKKILL /S system /U domain\username /FI "USERNAME ne NT*" /IM *
  51.     TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"
复制代码
筛选器是很有用滴

TOP

  1. taskkill /fi "IMAGENAME eq a.exe"  /fi "memusage gt 300000"|find "a.exe"&&start a.exe
复制代码

TOP

本帖最后由 ditto 于 2013-3-25 15:12 编辑
CrLf 发表于 2013-3-23 19:01



后面的start貌似没执行

TOP

返回列表