Board logo

标题: [系统相关] [已解决]批处理怎样按要求关闭相同的进程? [打印本页]

作者: mstsc    时间: 2011-8-28 22:53     标题: [已解决]批处理怎样按要求关闭相同的进程?

比方:现在打开一个cmd.exe 并隐藏运行,在打开一个cmd.exe。     在后面的过程中,不想关闭第二次打开的cmd.exe,只关闭第一次打开的cmd.exe
          请问是怎么做呢?
   进入进程里看见的也是2个cmd.exe ,只是PID不同。
作者: raymai97    时间: 2011-8-28 23:26

你的意思是:
第一个——隐藏运行,并能关闭
第二个——不隐藏运行,并不能关闭?
作者: mstsc    时间: 2011-8-28 23:34

不是的    第一隐藏运行;第二没隐藏运行。可以是我只想关闭第一个cmd.exe,不想关闭第二个cmd.exe
  请问该怎么做呢?
进入进程里看见的也是2个cmd.exe ,只是PID不同。
作者: mstsc    时间: 2011-8-28 23:35

回复 2# raymai97


    不是你说的这样
作者: sxw    时间: 2011-8-28 23:44

我也想知道啊,哈哈。
作者: raymai97    时间: 2011-8-29 00:15

没有时间,先写个,来不及debug,所以会有bug,等我有空再debug吧
现在先让楼主思考思考
  1. @echo off
  2. ::在背后启动第一个窗口
  3. if "%1"=="lol" goto hide
  4. set a=%random%
  5. start /b "" %0 lol %a%
  6. ::给第一个窗口一点时间来准备
  7. echo 请等待……
  8. ping -n 2 127.1>nul
  9. :a
  10. cls
  11. echo 我是第二个窗口
  12. ::如果没有发现第一个窗口的遗信,就进行互动,否则直接认为第一个窗口已不在
  13. if not exist %a%last (if not exist %a%alive (echo 隐藏着的第一个窗口已关闭&echo abc>%a%alive&goto b) else (echo 目前第一个窗口还开着&erase /f /q %a%alive)) else (echo 隐藏着的第一个窗口已关闭)
  14. :b
  15. echo.
  16. echo 提示:新建%a%die再按任意键看看,会发现隐藏的窗口已关闭。
  17. echo.
  18. pause
  19. goto a
  20. :hide
  21. set a=%2
  22. :hide2
  23. ::当发现%a%alive不在时就做多一个%a%alive,以跟第二个窗口互动
  24. if not exist %a%alive echo abc>%a%alive
  25. ::当隐藏中的窗口发现自己离去(退出)了,就留下%a%last的遗信,已告知第二个窗口它已经离开了
  26. if exist %a%die erase /f /q %a%die&echo abc>%a%last&exit
  27. goto hide
复制代码

作者: cjiabing    时间: 2011-8-29 01:24

请搜索论坛“进程”
作者: 冷玉公子    时间: 2011-8-29 11:30

楼上的有的复杂了哈哈  我有个思路
其实第一个cmd.exe的启动我们不去考虑
但是这里有个思路就是再开第二个CMD之前进程里只有一个CMD程序
所以思路就在这里了,运行第二个批处理的时候 先检测进程里的第一个CMD程序的PID 然后将其结束就可以了 哈哈 爽了吧
作者: zz100001    时间: 2011-8-29 12:25

wmic process where name='cmd.exe' get CreationDate, processid|more +1|sort /r

找最后一行,然后用

taskkill /f /pid ****
作者: mstsc    时间: 2011-8-29 19:37

有点复杂  弄不懂   
想现成的代码来研究
  谢谢
作者: raymai97    时间: 2011-8-30 01:08

本帖最后由 raymai97 于 2011-8-30 09:18 编辑

回复 10# mstsc
  1. @echo off
  2. if "%1"=="a" goto a
  3. set code=%random%
  4. title 通过后台通信,来知道对方“挂”了没
  5. echo.
  6. echo  此批处理由raymai97制作
  7. echo.
  8. echo  按任意键继续……
  9. echo.
  10. pause>nul
  11. start /b "" %0 a %code%>nul
  12. echo  请等待……
  13. ping -n 2 127.1>nul
  14. :b
  15. cls
  16. if exist %code%.tmp call :d
  17. if "%dead%"=="0" echo 它还没有死…… 创建%code%.godie来让它死
  18. if "%dead%"=="1" echo 它死掉了……&if exist %code%.godie erase /f /q %code%.godie
  19. echo.
  20. echo 按任意键刷新…… dead变量为%dead%
  21. echo.
  22. pause>nul
  23. goto b
  24. :a
  25. set code=%2
  26. if "%code%"=="" exit
  27. :c
  28. if not exist %code%.tmp echo %random%>%code%.tmp
  29. if exist %code%.godie exit
  30. goto c
  31. :d
  32. erase /f /q %code%.tmp
  33. ping -n 1 127.1>nul
  34. if not exist %code%.tmp (set dead=1) else (set dead=0)
  35. exit /b
复制代码
刚刚才做的,新鲜出炉,你应该会明白如何用~
作者: raymai97    时间: 2011-8-30 01:28

原理见:http://bathome.net/viewthread.ph ... amp;extra=#pid90993
作者: mstsc    时间: 2011-9-15 21:19

谢谢     帮助




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2