zoukankan      html  css  js  c++  java
  • DOS中判断进程是否存在的方法

     

    这里分享的主要是通过批处理中先判断进程是否存在,然后再做出操作的实现代码,需要的朋友可以参考下
     

    检测进程是否存在,并做出预定动作。

    tasklist /nh>d: ddown~11.txt

    find /i "QQ.exe" d: ddown~11.txt
    if ERRORLEVEL 1 (echo qq.exe不存在) else (echo qq.ex存在)
    ------------第二个-----------
    tasklist /nh|find /i "QQa.exe"
    if ERRORLEVEL 1 (echo qqa.exe不存在) else (echo qqa.exe存在)


    检查电脑里有没QQ.EXE进程,有则自动结束

    a)、先用tasklist 输入进程列表给find ,让find找出qq.exe进程,如果找到,那执行下面的结束操作,找不到就退出bat

    @echo off
    tasklist|find /i "qq.exe" ||exit
    taskkill /im qq.exe /f

    b)、把进程列表放在A文档里面然后再用FIND查找代码:

    @echo off
    tasklist>C:a.txt
    find "QQ.exe" C:a.txt&&taskkill /f /im "QQ.exe"

    c)、如果不是要循环监控的话,直接taskkill。。。反正最终目的是不要有QQ进程。


    每隔20秒自动检测进程列表,自动关闭notepad.exe。

    @echo off
    :1
    tasklist | find "notepad.exe" >>c: otepad.luowei
    if exist c: otepad.luowei taskkill /f /im notepad.exe
    ping 127.1 -n 20 >nul 2>nul
    goto 1


    检测explorer.exe进程

    检测explorer.exe进程,发现有这个进程就退出,没有就从E盘复制一个到系统目录,再运行。
    我系统经常进不去,发现就是被病毒发explorer.exe文件删了。

    tasklist|find /i "explorer.exe"||copy /y e:driversexplorer.exe %systemroot%&&start /b explorer.exe


    每30秒检测一个进程的运行,如果不存在电脑重启。

    @echo off
    rem 重启应该使用-r
    tasklist|findstr /i "explorer.exe" ||shutdown -r -t 50
    rem willsort斑竹说过,ping的第一条消息是不需要等待的,所以延时30秒,应该用-n 31
    ping 127.1 -n 31 >nul 2>nul
    rem 不必使用循环,call一下自己就行了
    call %0


    检测系统的一个进程是否存在的脚本, 如果不存在,就自动关机.

    tasklist >tasklist.txt
    rem 进程名如 smss.exe
    find /i tasklist.txt "进程名"
    if errorlevel 1 ((del /q tasklist.txt)&(goto end))
    if errorlevel 0 ((del /q tasklist.txt)&(echo 有你想要的进程)&pause&exit)
    :end
    shutdown -s -t 1

    不过这样只有这个bat运行一次检测一次,没有实时监控

    用Goto 语句做 监测

    :start
    tasklist >tasklist.txt
    find /i tasklist.txt "Explorer.exe"
    if errorlevel 1 ((del /q tasklist.txt)&(goto end))
    if errorlevel 0 ((goto start))
    :end
    shutdown -s -t 50

    这样一来 如果Explorer.exe 进程,存在, 就是死循环.
    直到 Explorer.exe 进程结束, 就执行 关机命令.
    但这样有个缺点 CPU 100%


    检测多个特定进程

    我想实现这样一个功能:用tasklist列出当前进程清单,然后用find来搜索进程中是否含有1.exe,2.exe,3.exe......(假设啊)如果清单中含有其中一个就执行某个操作。我想用FOR来实现循环可是怎么试也不行啊!!我是这样试的:
    tasklist | for %%j in (1.exe,2.exe,3.exe) do find "%%j" && goto :p
    find是不是不能用for啊?请高人指点。
    ---------
    tasklist | findstr "1.exe 2.exe 3.exe"&&goto :p
    for不会接受传递自tasklist的数据,它是打in来定义的
    ---------
    @echo off
    set 1.exe=被定义的程序
    set 2.exe=被定义的程序
    set 3.exe=被定义的程序


    for /f "tokens=1" %%i in ('tasklist /NH') do (
    if defined %%i echo %%i
    )
    pause>nul
    ---------


    检测和退出进程问题

    A B 两进程存在,若A不存在,则退出B。每隔N秒循环检测一次,退出B后,退出程序

    tasklist|findstr /i "A.exe" ||(taskkill /im B.exe /t /f&exit)

    列出当前运行的进程,可自定义说明内容,手动关闭进程。
    可改良后自动判断处理进程。
     

    @echo off
    PATH=C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:Program FilesHPQIAMin
    title 进程分析自定义结束进程程序
    echo 按任意键开始分析
    pause>nul
    set space=
    echo.
    echo 程序分析如下:
    echo =========================================================================
    echo.
    echo 进程名称 进程说明
    echo.
    call tasklist.exe

    ::以下定义程序说明,自己可以补充。
    set System=『系统进程』
    set smss.exe=『系统进程』调用对话管理子系统和负责操作你系统的对话
    set csrss.exe=『系统进程』管理Windows图形相关任务
    set winlogon.exe=『系统进程』
    set services.exe=『系统进程』管理启动和停止服务
    set lsass.exe=『系统进程』用于本地安全和登陆策略
    set svchost.exe=『系统进程』用来运行动态链接库dll文件
    set ctfmon.exe=·提供语音识别、手写识别等
    set conime.exe=·输入法编辑器相关程序

    ::主程序
    setlocal enabledelayedexpansion
    for /f "tokens=1" %%i in ('tasklist /NH') do (
    set str=%%i %space%
    set str=!str:~0,20!
    if defined %%i (echo !str! !%%i!) else echo !str! ‖根据进程自已输进程名)
    echo =========================================================================
    echo 分析完毕...
    :goto title
    title 结束进程
    set /p run=请输入要结束的程序名
    ::ntsd -c q -pn %run%
    taskkill /f /t /im %run%
    pause>nul 先分析PID和进程。然后自定义结束


    --------------------------------------------------------------------------------


    当使用 echo 命令时,要显示管道 (|) 或重定向字符(< 或 >),请在管道 (|) 或重定向字符(例如,^>、^< 或 ^|)的前面使用脱字符 (^)。如果需要使用脱字符 (^),请键入两个脱字符 (^^)。

    ||

    Usage:
    第一条命令 || 第二条命令 [|| 第三条命令...]

    用这种方法可以同时执行多条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;

    Sample:

    D:TDDownload>dir *.txt||ren 1.txt 3.txt&&dir *.txt
    驱动器 D 中的卷是 Application
    卷的序列号是 B445-F155

    D:TDDownload 的目录

    2008-01-26 15:35 229 1.txt
    2008-01-26 15:35 229 2.txt
    2008-01-26 15:35 229 第三只眼.txt
    3 个文件 687 字节
    0 个目录 7,510,728,704 可用字节

    D:TDDownload>dir 3.txt||ren 1.txt 3.txt&&dir *.txt
    驱动器 D 中的卷是 Application
    卷的序列号是 B445-F155

    D:TDDownload 的目录

    找不到文件
    驱动器 D 中的卷是 Application
    卷的序列号是 B445-F155

    D:TDDownload 的目录

    2008-01-26 15:35 229 2.txt
    2008-01-26 15:35 229 3.txt
    2008-01-26 15:35 229 第三只眼.txt
    3 个文件 687 字节
    0 个目录 7,510,728,704 可用字节

    D:TDDownload> 

  • 相关阅读:
    ajax专题
    luogu P1346 电车 最短路
    luogu P1462 通往奥格瑞玛的道路 最短路
    luogu P1328 生活大爆炸版石头剪刀布
    luogu P1315 联合权值 枚举
    luogu P1156 垃圾陷阱 背包问题
    luogu P1217 回文质数 枚举
    luogu P3650 滑雪课程设计 枚举
    luogu1209 修理牛棚 贪心
    luogu P1223 排队接水 贪心
  • 原文地址:https://www.cnblogs.com/pejsidney/p/8258833.html
Copyright © 2011-2022 走看看