找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 31062|回复: 12

[系统相关] [已解决]批处理怎样按要求关闭相同的进程?

[复制链接]
发表于 2011-8-28 22:53:11 | 显示全部楼层 |阅读模式
比方:现在打开一个cmd.exe 并隐藏运行,在打开一个cmd.exe。     在后面的过程中,不想关闭第二次打开的cmd.exe,只关闭第一次打开的cmd.exe
          请问是怎么做呢?
   进入进程里看见的也是2个cmd.exe ,只是PID不同。

评分

参与人数 1PB +2 收起 理由
CrLf + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-8-28 23:26:20 | 显示全部楼层
你的意思是:
第一个——隐藏运行,并能关闭
第二个——不隐藏运行,并不能关闭?
 楼主| 发表于 2011-8-28 23:34:54 | 显示全部楼层
不是的    第一隐藏运行;第二没隐藏运行。可以是我只想关闭第一个cmd.exe,不想关闭第二个cmd.exe
  请问该怎么做呢?
进入进程里看见的也是2个cmd.exe ,只是PID不同。

评分

参与人数 1技术 +1 收起 理由
telnet + 1 谢谢楼主 帮助

查看全部评分

 楼主| 发表于 2011-8-28 23:35:29 | 显示全部楼层
回复 2# raymai97


    不是你说的这样
发表于 2011-8-28 23:44:58 | 显示全部楼层
我也想知道啊,哈哈。
发表于 2011-8-29 00:15:59 | 显示全部楼层
没有时间,先写个,来不及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
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

发表于 2011-8-29 01:24:05 | 显示全部楼层
请搜索论坛“进程”
发表于 2011-8-29 11:30:25 | 显示全部楼层
楼上的有的复杂了哈哈  我有个思路
其实第一个cmd.exe的启动我们不去考虑
但是这里有个思路就是再开第二个CMD之前进程里只有一个CMD程序
所以思路就在这里了,运行第二个批处理的时候 先检测进程里的第一个CMD程序的PID 然后将其结束就可以了 哈哈 爽了吧
发表于 2011-8-29 12:25:47 | 显示全部楼层
wmic process where name='cmd.exe' get CreationDate, processid|more +1|sort /r

找最后一行,然后用

taskkill /f /pid ****
 楼主| 发表于 2011-8-29 19:37:53 | 显示全部楼层
有点复杂  弄不懂   
想现成的代码来研究
  谢谢
发表于 2011-8-30 01:08:38 | 显示全部楼层
本帖最后由 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
复制代码
刚刚才做的,新鲜出炉,你应该会明白如何用~

评分

参与人数 1技术 +1 收起 理由
mstsc + 1 谢谢

查看全部评分

发表于 2011-8-30 01:28:03 | 显示全部楼层
 楼主| 发表于 2011-9-15 21:19:57 | 显示全部楼层
谢谢     帮助

评分

参与人数 1技术 +1 收起 理由
telnet + 1 要多多努力

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 00:19 , Processed in 0.024464 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表