Board logo

标题: [其他] 批处理后台通信,还能知道“对方”挂了没有 [打印本页]

作者: raymai97    时间: 2011-8-30 01:26     标题: 批处理后台通信,还能知道“对方”挂了没有

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

废话不说,附上代码
  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
复制代码
此代码唯一不足的地方就是代码有点长,并会留下临时文件(但如果显示“对方”挂了,这个批处理会把临时文件杀掉),所以期待defanive前辈要多多加油开发新的cmd啦!期待提供多线程和后台通信的命令~

批处理是如何实现的:
上次写的“遗信”方法太麻烦了,这次来点简单的~ (a代表显示着的窗口,b代表隐藏着的窗口)
1. 首先检查%1是否为a,如果是就去:a,不是就设置code为random号码并继续
2. 给用户提示(写着raymai那边),按下任意键就启动自己本身(%0)+参数%1(a),也就是b,并给一秒的时间来让它warm up(热身)
3. 现在a的工作是负责删除%code%.tmp,b则是在创建%code%.tmp,并检查当前目录有没有“死亡命令”文件(%code%.godie)
4. 如果a发现%code%.tmp,就代表b可能还在,就做多一次实验,此时进入:d进行判断
5. :d就是删除多一次,然后延时ping -n 1 127.1>nul,然后看,如果%code%.tmp不在,就代表b死掉来了,否则就代表b还在(因为b还在的话,会发现%code%.tmp不见,并再做一个的)
6. 整个代码就是这样简单~ 什么,觉得很乱很复杂?呵呵~ 证明我打得很辛苦下的哦~ 所以大家要支持哦~
作者: raymai97    时间: 2011-8-30 13:11

没有人支持…… o(>﹏<)o 呜呜呜~
作者: cjiabing    时间: 2011-8-30 16:59

看不懂用来做什么,请说得通俗易懂点吧。如果想探讨第二个进程是否存在,也不必如此麻烦,搜索下论坛的“进程”。




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