返回列表 发帖

[文件管理] [分享]两个批处理程序间的参数传递

两个批处理间的参数(数值)传递,方法有许多,下面介绍“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 aCOPY

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 :bCOPY


运行A,然后运行B。
A程序用于检测QQ是否运行,以及指定昵称的QQ消息窗口是否存在。假如存在就把该QQ的PID发送到其cmd.exe的标题。
B程序用于检测指定标题的cmd.exe进程,假如该指定进程名称出现“◇”开头,“:”为分割的标题,则读取该标题上的信息。读取之后你可以利用这些信息,比如用来结束该QQ。
以上只是举例,问题还是比较多的,自己根据实际需要解决,就不详述了。
1

评分人数

寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

思路好巧妙

TOP

5# mstsc 这个不是很难吧,主要涉及For、if、tastlist等命令。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

看着这些复杂的代码,我是多么的希望自己能看懂。哎,想先学点简单的都不知道在那里找

TOP

来一个详细的演示,用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 :eofCOPY


子程序
@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
COPY
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

2# mxxcgzxxx
你说的也是,效率可能不是很好,但这样做的目的就是不用临时文件!~
而且,所有监控都涉及循环,而循环对批处理而言都不是件好处理的事情,CPU会狂飙地!~
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

也就是通过特殊格式的CMD标题来传递信息,
那为什么不用临时文本来传递呢?不是更简单?反正都是双开无限循环.
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

返回列表