中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-24 02:37
47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,274 会员排行
DOS批处理 & 脚本技术(批处理室) » 征集批处理接受脚本语言返回结果的方法!
可打印版本  2,897 / 26
第16楼 sunyao 发表于 2006-11-08 00:22
初级用户 发帖 60 积分 141 来自 天津
那就是说for语句是在C:\bea\weblogic91\common\bin\wlst.cmd startserver.py输出的信息中找 并不是我想要的在startserver.py中找变量status 并获取status的值是吧
第17楼 redtek 发表于 2006-11-08 00:32
金牌会员 发帖 1,147 积分 2,902
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 文本第一行的内容。
  这也是取得(交换)变量的一种方法。



[ Last edited by redtek on 2006-11-8 at 12:41 AM ]
第18楼 sunyao 发表于 2006-11-08 01:09
初级用户 发帖 60 积分 141 来自 天津
现在我同过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中存放的是哪个 是去后者吗
第19楼 sunyao 发表于 2006-11-08 01:12
初级用户 发帖 60 积分 141 来自 天津
是不是在for语句后面加set state=就把变量%i赋给state了
也就是现在state就是RUNNING或C:\bestway\jcl>ENDLOCAL
第20楼 redtek 发表于 2006-11-08 01:32
金牌会员 发帖 1,147 积分 2,902
模拟建了一个多行数据文件 a.txt (代表你要取的含有RUNNING字串的输出信息)

你看到上面 a.txt 有多行,最后一行是g。
直接在命令行取得 a.txt 多行内容并赋值给名为“变量”的一个变量。

你看到for执行时是依次将取得的a.txt内容赋给变量,
因为是多次赋值给同一个变量,所以最后一句: set 变量=g已经将前面赋的值都“冲了”,全被g这个字符给取代了。

上面显示一下变量内容,结果是最后一次取得的内容: g


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

但,好象想起了你一次想判断Weblogic服务器是否正常正在运行时的标置的贴子,
如果此贴与如上所指的贴子有与判断weblogic服务器是否正常启动有关联的话,
那么你这么做在走很大的弯路。
第21楼 sunyao 发表于 2006-11-08 01:46
初级用户 发帖 60 积分 141 来自 天津
没错先前的那贴子 我是用netstat -na | findstr ":80 "来判断Weblogic是否启动成功
可后来上司说要在脚本中实现判断启动与否
所以现在就想方设法 把脚本的判断结果取出来 没办法
可是我想要RUNNING这个结果 可现在%%i的值是C:\bestway\jcl>ENDLOCA
能不能把C:\bestway\jcl>ENDLOCA删掉
第22楼 redtek 发表于 2006-11-08 02:58
金牌会员 发帖 1,147 积分 2,902
这是一个查找通过for..()取得的输出信息中所返回字符串中是否有你指定的字符串的值……
可替换成你所指定的如RUN……什么的内容。

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

第23楼 sunyao 发表于 2006-11-08 03:17
初级用户 发帖 60 积分 141 来自 天津
for /f "skip=34 delims=" %%i in ('C:\bea\weblogic91\common\bin\wlst.cmd startserver.py') do (
if /i "%i"=="RUNNING" ( set state="RUNNING" )
)
我试试行不行
第24楼 sunyao 发表于 2006-11-08 04:37
初级用户 发帖 60 积分 141 来自 天津
试过了 成功 !!!
感谢redtek兄!!!!
再看看有没有其他问题
没事 就开始做停止的脚本
第25楼 honhaizh 发表于 2006-11-16 20:28
初级用户 发帖 18 积分 35
学习
第26楼 hxuan999 发表于 2006-11-23 00:44
中级用户 发帖 161 积分 337
我正想找这个呢
第27楼 electronixtar 发表于 2006-11-23 07:20
铂金会员 发帖 2,672 积分 7,493
都开始讨论 WebLogic 了啊,高科技~~
上一页  1 2
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023