标题: [其他] 批处理后台通信,还能知道“对方”挂了没有 [打印本页]
作者: raymai97 时间: 2011-8-30 01:26 标题: 批处理后台通信,还能知道“对方”挂了没有
本帖最后由 raymai97 于 2011-8-30 09:16 编辑
废话不说,附上代码- @echo off
- if "%1"=="a" goto a
- set code=%random%
- title 通过后台通信,来知道对方“挂”了没
- echo.
- echo 此批处理由raymai97制作
- echo.
- echo 按任意键继续……
- echo.
- pause>nul
- start /b "" %0 a %code%>nul
- echo 请等待……
- ping -n 2 127.1>nul
- :b
- cls
- if exist %code%.tmp call :d
- if "%dead%"=="0" echo 它还没有死…… 创建%code%.godie来让它死
- if "%dead%"=="1" echo 它死掉了……&if exist %code%.godie erase /f /q %code%.godie
- echo.
- echo 按任意键刷新…… dead变量为%dead%
- echo.
- pause>nul
- goto b
- :a
- set code=%2
- if "%code%"=="" exit
- :c
- if not exist %code%.tmp echo %random%>%code%.tmp
- if exist %code%.godie exit
- goto c
- :d
- erase /f /q %code%.tmp
- ping -n 1 127.1>nul
- if not exist %code%.tmp (set dead=1) else (set dead=0)
- 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://bathome.net./) |
Powered by Discuz! 7.2 |