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> 

  • 相关阅读:
    积性函数前缀和
    CF1067D Computer Game
    Atcoder Tenka1 Programmer Contest 2019 题解
    Codeforces Round #549 (Div. 1) 题解
    SHOI2019旅游记
    CF871D Paths
    CF1065E Side Transmutations
    停更公告
    博客说明
    SCOI2019酱油记
  • 原文地址:https://www.cnblogs.com/pejsidney/p/8258833.html
Copyright © 2011-2022 走看看