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

[系统相关] [已解决]批处理如何监控一个进程,等这个进程结束一分钟后关机?

本帖最后由 001011 于 2011-8-19 19:19 编辑

假设这个进程是a.exe。这个进程是个识别软件的进程,对每张图片进行识别的时候,这一张转换完成 在转换下一张的时候这个进程会自动终止,当读取到下一张图片的时候这个进程就会出现。所以不能在某个时刻没有监听到这个进程就判断可以关机了。而是连续一分钟没有这个进程出现才能代表这个任务已经结束,才能关机!
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
非常好的论坛

本帖最后由 xslxslxsl 于 2011-8-19 22:16 编辑

是不是你那个A.EXE停止后,在进程中就消失了,也就是大于等于一分钟未发现该进程就可以视为程序停止,可以关闭计算机了吗?
  1. @echo off
  2. :RESTART
  3. tasklist /FI "username eq administrator" | find /C "a.exe" > temp.txt
  4. set /p n= < temp.txt
  5. del /F temp.txt
  6. ping -n 100 172.0.0.1 > nul
  7. tasklist /FI "username eq administrator" | find /C "a.exe" > t.txt
  8. set /p m= < t.txt
  9. del /F t.txt
  10. set /a b=n+m
  11. if "%b%"=="0" (shutdown -s ) else echo 程序还在运行
  12. goto restart
复制代码
写得有些粗糙,可以修改ping -n 100 172.0.0.1  中n后面的100来延长时间,我还真不知道发一个数据包大概是多久哦。
1

评分人数

TOP

酱紫
@echo off
:A
set var=0
for /f %%a in ('tasklist') do (if /i %%a==A.exe set var=1)
if %var%==1 (echo 存在) else (GOTO B)
GOTO A
:B
echo.
shutdown -s -t 60
邮箱‘;[email]xzix@qq.com[/email]
2

评分人数

    • Batcher: 请编辑自己的帖子,把代码放到code标签里面 ...PB -2
    • 001011: 谢谢啦 呵呵技术 + 1

TOP

是不是你那个A.EXE停止后,在进程中就消失了,也就是大于等于一分钟未发现该进程就可以视为程序停止,可以关 ...
xslxslxsl 发表于 2011-8-18 22:45

是的,一分钟之内没有这个进程就可以关机了 谢谢
非常好的论坛

TOP

是不是你那个A.EXE停止后,在进程中就消失了,也就是大于等于一分钟未发现该进程就可以视为程序停止,可以关 ...
xslxslxsl 发表于 2011-8-18 22:45



    我如何改为我的自己的进程呢?难道是改:notepad.exe
非常好的论坛

TOP

酱紫
@echo off
:A
set var=0
for /f %%a in ('tasklist') do (if /i %%a==A.exe set var=1)
if %var% ...
xzix 发表于 2011-8-18 22:53



    貌似没有延时呀  只要没有A.EXE就马上关机了
非常好的论坛

TOP

回复 6# 001011


@echo off
:A
set var=0
for /f %%a in ('tasklist') do (if /i %%a==A.exe set var=1)
if %var%==1 (echo 存在) else (GOTO B)
GOTO A
:B
echo.
shutdown -s -t 60

TOP

60秒就是延时吧。

TOP

还是不行呀  我现在用按键精灵解决了这个问题  谢谢啦
非常好的论坛

TOP

回复 5# 001011


    我刚刚上网看到你的消息,我当时是用记事本(notepad)做测试的,其实就是将那NOTEPAD的进程改成你那个程序的进程就可以了。不好意思回话迟了。
1

评分人数

TOP

这个其实就是用 tasklist、find 、ping -n 和管通或者FOR就可以了。
俺还是不太会用FOR,还是用 “| && ||”这个简单的好用的判断句顺手的说。~

TOP

回复  001011


    我刚刚上网看到你的消息,我当时是用记事本(notepad)做测试的,其实就是将那NOTE ...
xslxslxsl 发表于 2011-8-19 22:17

非常感谢您,非常好用。我从100调整到了3  OK
非常好的论坛

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. :loop
  3. set dp_var=1
  4. call :DetechProcess
  5. ping /n 60 127.0.1>nul
  6. if !dp_var!==1 (shutdown -s -t 60) else (goto loop)
  7. echo over
  8. pause
  9. exit
  10. :DetechProcess
  11. for /f "tokens=1" %%a in ('tasklist /fi "IMAGENAME eq notepad.exe" /FO TABLE /NH') do (
  12.     if /i "%%a"=="notepad.exe" (set dp_var=0&ping /n 20 127.0.1>nul&goto DetechProcess)
  13. )
  14. goto :eof
复制代码
1

评分人数

    • 001011: 谢谢 非常好用技术 + 1
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 12# 001011
不用客气哦,好用就行了,大家都是为了学习嘛,这里的人很多都很耐心的,嘻嘻。

TOP

@echo off
::隐藏窗口
if "%1" neq "1" (
>"%temp%\tmp.vbs" echo set WshShell = WScript.CreateObject^(^"WScript.Shell^"^)
>>"%temp%\tmp.vbs" echo WshShell.Run chr^(34^) ^& %0 ^& chr^(34^) ^& ^" 1^",0
start /d "%temp%" tmp.vbs
exit
)
::执行代码
title 进程监控
::从进程列表中查找指定进程
:start
tasklist /nh>C:\kill.ini
@find /I /C "a.exe" C:\kill.ini > nul
if %ERRORLEVEL% == 0 (
ping 127.1 -n 9 >nul
goto start
) else (
echo %date%%time%   检测不到进程,5秒后执行关机 >>c:\log.ini
shutdown -s -t 5
)

TOP

返回列表