标题: [文件管理] [分享]两个批处理程序间的参数传递 [打印本页]
作者: cjiabing 时间: 2011-6-12 20:12 标题: [分享]两个批处理程序间的参数传递
两个批处理间的参数(数值)传递,方法有许多,下面介绍“TT”(Title和Tasklist)法。
有两个批处理程序,A.bat和B.bat,其中A程序代码如下:
-
- @echo off
- :a
- for /f "tokens=2" %%a in ('TASKLIST /FI "IMAGENAME eq QQ.exe" /FI "STATUS eq running" /FO TABLE /NH') do title ◇:有QQ程序在运行,进程PID“%%a”
- for /f "tokens=2" %%a in ('tasklist /fi "WINDOWTITLE eq 铁哥 " /FO TABLE /NH') do title ◇:存在指定名称的进程窗口,进程PID“%%a”
- ping /n 5 127.0.1>nul
- title 主进程
- goto a
复制代码
B程序代码如下:
-
- @echo off
- :b
- for /f "tokens=9,* delims=: " %%a in ('"tasklist /v /fi "IMAGENAME eq cmd.exe" /FO TABLE /NH"') do (
- if /i %%a==◇ echo %%b
- )
- ping /n 3 127.0.1>nul
- title 检测进程
- goto :b
复制代码
运行A,然后运行B。
A程序用于检测QQ是否运行,以及指定昵称的QQ消息窗口是否存在。假如存在就把该QQ的PID发送到其cmd.exe的标题。
B程序用于检测指定标题的cmd.exe进程,假如该指定进程名称出现“◇”开头,“:”为分割的标题,则读取该标题上的信息。读取之后你可以利用这些信息,比如用来结束该QQ。
以上只是举例,问题还是比较多的,自己根据实际需要解决,就不详述了。
作者: mxxcgzxxx 时间: 2011-6-13 11:24
也就是通过特殊格式的CMD标题来传递信息,
那为什么不用临时文本来传递呢?不是更简单?反正都是双开无限循环.
作者: cjiabing 时间: 2011-6-20 22:44
2# mxxcgzxxx
你说的也是,效率可能不是很好,但这样做的目的就是不用临时文件!~
而且,所有监控都涉及循环,而循环对批处理而言都不是件好处理的事情,CPU会狂飙地!~
作者: cjiabing 时间: 2011-6-20 23:44
来一个详细的演示,用A检测IE,用B发出执行指令。
主程序:
- @echo off
- ::主程序
-
- :获取检测结果
- for /f "tokens=9,10* delims=: " %%a in ('"tasklist /v /fi "IMAGENAME eq cmd.exe" /FO TABLE /NH"') do (
- if /i %%a==◇ (echo %%b %%c&call :执行命令&%var% %%c)
- )
- ping /n 3 127.0.1>nul
- if "%var%"=="" title 主程序
- goto :获取检测结果
-
- :执行命令
- echo,&set var=
- set /p var= 请输入需要执行的命令(Y-结束IE;N-退出程序;直接回车返回):
- if "%var%"=="" (set "var=title ◆:echo"&&goto :eof)
- if /i "%var%"=="y" goto 结束进程
- if /i "%var%"=="n" goto 自动退出
- goto :eof
-
- :结束进程
- set "var=title ◆:taskkill /f /t /pid %1"
- goto :eof
-
- :自动退出
- set "var=title ◆:exit"
- goto :eof
复制代码
子程序
-
- @echo off
- ::介绍
- :: A 程序为子程序,用于检测是否存在 IE ,并接收和执行 B 发送的指令。
- :: B 程序为主程序,用于接收检测结果,并向 A 发出执行指令。
-
- :检测进程
- ::检测运行中的进程
- for /f "tokens=2" %%a in ('TASKLIST /FI "IMAGENAME eq IEXPLORE.exe" /FI "STATUS eq running" /FO TABLE /NH') do title ◇:有IE运行,进程PID %%a
- ::检测指定窗口名的进程
- for /f "tokens=2" %%a in ('tasklist /fi "WINDOWTITLE eq 小白兔 " /FO TABLE /NH') do title ◇:存在指定名称的进程窗口,进程PID %%a
- ping /n 5 127.0.1>nul
- call :接收指令
- title 子程序
- goto 检测进程
-
- :接收指令
- for /f "tokens=9,* delims=: " %%a in ('"tasklist /v /fi "IMAGENAME eq cmd.exe" /FO TABLE /NH"') do (
- if /i %%a==◆ (%%b)
- )
- goto :eof
-
-
复制代码
作者: mstsc 时间: 2011-7-17 19:41
看着这些复杂的代码,我是多么的希望自己能看懂。哎,想先学点简单的都不知道在那里找
作者: cjiabing 时间: 2011-7-18 00:29
5# mstsc 这个不是很难吧,主要涉及For、if、tastlist等命令。
作者: flaven 时间: 2013-2-6 11:47
思路好巧妙
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |