中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 征集批处理接受脚本语言返回结果的方法!
« [1] [2] »
作者:
标题: 征集批处理接受脚本语言返回结果的方法! 上一主题 | 下一主题
sunyao
初级用户




积分 141
发帖 60
注册 2006-10-28
来自 天津
状态 离线
『第 16 楼』:  

那就是说for语句是在C:\bea\weblogic91\common\bin\wlst.cmd startserver.py输出的信息中找  并不是我想要的在startserver.py中找变量status  并获取status的值是吧

2006-11-8 00:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 17 楼』:  

for /f %%i in (.......你要取得信息的途径:执行什么命令或文件来得到输出.....) do 你要用for取到的信息干什么

所以,for语句是在 for /f %%i in ( 在这里执行了什么所得到的输出的信息中找 )……

这就是3楼electronixtar兄所说的从下面的任何一种方式中获得变量的途径:
                1. 临时文件
                2. 参数
                3. 变量
                4. 输出重定向

你通过 for ....( 取得信息的途径接口 ) do ... 这种方法可以得到一个命令或执行所输出的信息~:)

既然上面几种方法可以让你得到信息(或叫做你要获取的变量值),
那么至于怎么取得你要的信息,要看信息提供者(给你提供信息的命令或程序)是如何与你的批处理相互配合的事情了:)


获得信息的途径:(说明:第1、3、4种获得变量的方法)

) 要获得的内容在 a.txt 文件内,你可以把它当做临时文件(第1种)。
  这个临时文件你可以用任何应用程序和脚本创建。

) set /p 变量名= 赋值语句,通过了 <a.txt 重定向来得到 a.txt 文本第一行的内容。
  这也是取得(交换)变量的一种方法。
C:\TEMP\put>type a.txt
My name is Redtek~:)

C:\TEMP\put>set /p 我的名字=<a.txt

C:\TEMP\put>echo %我的名字%
My name is Redtek~:)
[ Last edited by redtek on 2006-11-8 at 12:41 AM ]



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-11-8 00:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sunyao
初级用户




积分 141
发帖 60
注册 2006-10-28
来自 天津
状态 离线
『第 18 楼』:  

现在我同过for /f  "skip=34 delims="  %%i in ('C:\bea\weblogic91\common\bin\wlst.cmd startserver.py') do echo %%i
语句找到
C:\bestway\jcl>echo RUNNING
RUNNING

C:\bestway\jcl>echo C:\bestway\jcl>ENDLOCAL
C:\bestway\jcl>ENDLOCAL
其中RUNNING是我在startserver.py中用print status得到的值
应该就是我想要的
可是找出来的是两条结果RUNNING和C:\bestway\jcl>ENDLOCAL
那变量%i中存放的是哪个  是去后者吗

2006-11-8 01:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sunyao
初级用户




积分 141
发帖 60
注册 2006-10-28
来自 天津
状态 离线
『第 19 楼』:  

是不是在for语句后面加set state=就把变量%i赋给state了
也就是现在state就是RUNNING或C:\bestway\jcl>ENDLOCAL

2006-11-8 01:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 20 楼』:  

模拟建了一个多行数据文件 a.txt (代表你要取的含有RUNNING字串的输出信息)
C:\TEMP\put>type a.txt
a
b
c
d
e
f
g
你看到上面 a.txt 有多行,最后一行是g。
直接在命令行取得 a.txt 多行内容并赋值给名为“变量”的一个变量。
C:\TEMP\put>for /f %i in (a.txt) do set 变量=%i
(仔细看:上面一行命令是执行。下面这些输出是上面for执行时的赋值过程:)
 C:\TEMP\put>set 变量=a
 C:\TEMP\put>set 变量=b
 C:\TEMP\put>set 变量=c
 C:\TEMP\put>set 变量=d
 C:\TEMP\put>set 变量=e
 C:\TEMP\put>set 变量=f
 C:\TEMP\put>set 变量=g
你看到for执行时是依次将取得的a.txt内容赋给变量,
因为是多次赋值给同一个变量,所以最后一句: set 变量=g已经将前面赋的值都“冲了”,全被g这个字符给取代了。
C:\TEMP\put>echo %变量%
g
上面显示一下变量内容,结果是最后一次取得的内容: g


所以,你上面的for依次赋值得到的只能是最后一行的有效输出。
所以,for ...skip=跳过行数 可以解决部分固定输出行数不变的某个指定行的内容。
所以,if [RUNNING] == [%%i] 也可以解决非赋值的情况下直字串精确匹配查找%%i中是否拥有你要找的内容。

但,好象想起了你一次想判断Weblogic服务器是否正常正在运行时的标置的贴子,
如果此贴与如上所指的贴子有与判断weblogic服务器是否正常启动有关联的话,
那么你这么做在走很大的弯路。



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-11-8 01:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sunyao
初级用户




积分 141
发帖 60
注册 2006-10-28
来自 天津
状态 离线
『第 21 楼』:  

没错先前的那贴子 我是用netstat -na | findstr ":80 "来判断Weblogic是否启动成功
可后来上司说要在脚本中实现判断启动与否
所以现在就想方设法 把脚本的判断结果取出来  没办法
可是我想要RUNNING这个结果  可现在%%i的值是C:\bestway\jcl>ENDLOCA
能不能把C:\bestway\jcl>ENDLOCA删掉

2006-11-8 01:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 22 楼』:  

这是一个查找通过for..()取得的输出信息中所返回字符串中是否有你指定的字符串的值……
可替换成你所指定的如RUN……什么的内容。

(下面代码只是原理,具体要做什么sunyao兄可以再重新编写更适合的内容~:)
(代码中 if 是与大小写无关的精确匹配,如果需要模糊匹配可用find或findstr或字符替换等方式进行)
@echo off

set 服务器状态=没有启动
for /f %%i in (a.txt) do (
        if /i [%%i]==[你要找的RUNNING什么的字符串] ( set 服务器状态=启动 )
)

echo %服务器状态%




    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-11-8 02:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sunyao
初级用户




积分 141
发帖 60
注册 2006-10-28
来自 天津
状态 离线
『第 23 楼』:  

for /f  "skip=34 delims="  %%i in ('C:\bea\weblogic91\common\bin\wlst.cmd startserver.py') do (
        if /i "%i"=="RUNNING" ( set state="RUNNING" )
)
我试试行不行

2006-11-8 03:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sunyao
初级用户




积分 141
发帖 60
注册 2006-10-28
来自 天津
状态 离线
『第 24 楼』:  

试过了  成功 !!!
感谢redtek兄!!!!
再看看有没有其他问题
没事  就开始做停止的脚本

2006-11-8 04:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
honhaizh
初级用户





积分 35
发帖 18
注册 2006-4-26
状态 离线
『第 25 楼』:  

学习

2006-11-16 20:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hxuan999
中级用户

DOS之日


积分 337
发帖 161
注册 2006-11-4
状态 离线
『第 26 楼』:  

我正想找这个呢



for /f %%h in (`echo hxuan`) do for /f %%x in (`echo hxuan`) do if %%h==%%x nul
2006-11-23 00:44
查看资料  发送邮件  发短消息 网志  OICQ (33899867)  编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 27 楼』:  

都开始讨论 WebLogic 了啊,高科技~~




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-11-23 07:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: