标题: 征集批处理接受脚本语言返回结果的方法!
[打印本页]
作者: sunyao
时间: 2006-11-7 04:00
标题: 征集批处理接受脚本语言返回结果的方法!
在批处理文件中接受vbs等其他脚本语言的返回结果的方法!!
作者: sunyao
时间: 2006-11-7 04:02
先举一例子引用youxi01用户的例子:
看看以下代码:
@echo off
::写一个求字符串长度的vbs文件
echo temp=wscript.arguments(0) >temp.vbe
echo for i=1 to len(temp) >>temp.vbe
echo if asc(mid(temp,i,1))^<0 then >>temp.vbe
echo strlen=strlen+2 >>temp.vbe
echo else >>temp.vbe
echo strlen=strlen+1 >>temp.vbe
echo end if >>temp.vbe
echo next >>temp.vbe
echo wscript.echo strlen >>temp.vbe
:Start
set /p EN=请输入字符串:(直接回车退出)=
if not defined EN goto :Over
::获取vbe文件的执行结果
for /f %%i in ('cscript.exe temp.vbe %EN% //nologo') do echo.&echo 字符串长度为: %%i
set EN=
goto :Start
:Over
::删除生成的文件
del temp.vbe
这一句是关键:
for /f %%i in ('cscript.exe temp.vbe %EN% //nologo') do ......
利用for循环,读取vbs返回结果,也可以算是批处理接受脚本语言返回结果的一种解决办法吧。(当然在本程序中,没必要一定要使用for)
作者: electronixtar
时间: 2006-11-7 05:13
1. 临时文件
2. 参数
3. 变量
4. 输出重定向
作者: sunyao
时间: 2006-11-7 05:28
高人举几个例子 解释一下吧
作者: youxi01
时间: 2006-11-7 05:39
electronixtar的意思是,先用vbs脚本或者其它程序将返回结果写入文件,然后利用批处理读取文件就行了。
作者: sunyao
时间: 2006-11-7 05:48
哦 我明白了
youxi01可是用for /f %%i in ('C:\bea\weblogic91\common\bin\wlst.cmd startserver.py %status% //Nologo') do echo %%i方法不好使
作者: sunyao
时间: 2006-11-7 06:45
electronixtar
麻烦能不能举一个vbs脚本将返回结果写入文件,然后利用批处理读取文件的例子。
谢谢!!
作者: electronixtar
时间: 2006-11-7 08:34
这个~~我写一个吧
a.vbs
CreateObject("Scripting.FileSystemObject").CreateTextFile("test.txt").write "hello"
b.bat
for /f %a in ("test.txt") do @echo %a
其实我的批处理真的很菜~
作者: sunyao
时间: 2006-11-7 22:56
我现在用
for /f %%i in ('C:\bea\weblogic91\common\bin\wlst.cmd startserver.py %status% //Nologo') do echo %%i
我想在startserver.py文件中取出变量status的值
怎么就去不出来呢 快疯了
作者: zerocq
时间: 2006-11-7 23:24
把批处理分成两部分第一部分调用vbs产生参数
再让vbs调用第二部分批处理带上参数这样可以不?
for /f %%i in ('C:\bea\weblogic91\common\bin\wlst.cmd startserver.py %status% //Nologo') do echo %%i这句括号里带 %status% //Nologo有什么用的啊??
作者: zjh7547
时间: 2006-11-7 23:44
批处理中调用SQL脚本时如何返回结果?
比如要得到SQL Server 的安装目录 ,在批处理中如何得到?用sql命令就很简单了 ,可惜不知道如何将得到的字符串传回DOS中???
作者: redtek
时间: 2006-11-7 23:52
Quote: |
Originally posted by sunyao at 2006-11-7 22:56:
我现在用
for /f %%i in ('C:\bea\weblogic91\common\bin\wlst.cmd startserver.py %status% //Nologo') do echo %%i
我想在startserver.py文件中取出变量status的值
怎么就去不出来堮.. |
|
) C:\bea\weblogic91\common\bin\wlst.cmd startserver.py %status%都输出什么内容?
) %status% 有这个变量吗?内容是什么?
) //Nologo 是针对wscript.exe的参数:不显示hui标,执行时不显示标致,
这跟你那个wlst.cmd startserver.py %status% 有关系吗?
作者: sunyao
时间: 2006-11-8 00:05
我输出startserver.py时显示
驱动器中没有标签
卷的序列号是9c83-6df1
作者: sunyao
时间: 2006-11-8 00:09
是不是如果dir出不来的文件就查不到呀
作者: redtek
时间: 2006-11-8 00:10
for /f "delims=" %%i in ('C:\bea\weblogic91\common\bin\wlst.cmd startserver.py') do echo %%i
再试一下输出什么?
只要你 c:\bea\weblogic91\common\bin\wlst.cmd startserver.py 的输出信息正常,
并且 wlst.cmd 代码中没有产生让你的 for /f ....主批处理遇到不可抗力的因素(如:战争、地震、……~:P)。
你 C:\bea\weblogic91\common\bin\wlst.cmd startserver.py 输出的什么文本信息,你for取回了就是什么(除了特殊情况)。
[
Last edited by redtek on 2006-11-8 at 12:12 AM ]
作者: sunyao
时间: 2006-11-8 00:22
那就是说for语句是在C:\bea\weblogic91\common\bin\wlst.cmd startserver.py输出的信息中找 并不是我想要的在startserver.py中找变量status 并获取status的值是吧
作者: redtek
时间: 2006-11-8 00:32
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 ]
作者: sunyao
时间: 2006-11-8 01:09
现在我同过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中存放的是哪个 是去后者吗
作者: sunyao
时间: 2006-11-8 01:12
是不是在for语句后面加set state=就把变量%i赋给state了
也就是现在state就是RUNNING或C:\bestway\jcl>ENDLOCAL
作者: redtek
时间: 2006-11-8 01:32
模拟建了一个多行数据文件 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服务器是否正常启动有关联的话,
那么你这么做在走很大的弯路。
作者: sunyao
时间: 2006-11-8 01:46
没错先前的那贴子 我是用netstat -na | findstr ":80 "来判断Weblogic是否启动成功
可后来上司说要在脚本中实现判断启动与否
所以现在就想方设法 把脚本的判断结果取出来 没办法
可是我想要RUNNING这个结果 可现在%%i的值是C:\bestway\jcl>ENDLOCA
能不能把C:\bestway\jcl>ENDLOCA删掉
作者: redtek
时间: 2006-11-8 02:58
这是一个查找通过for..()取得的输出信息中所返回字符串中是否有你指定的字符串的值……
可替换成你所指定的如RUN……什么的内容。
(下面代码只是原理,具体要做什么sunyao兄可以再重新编写更适合的内容~:)
(代码中 if 是与大小写无关的精确匹配,如果需要模糊匹配可用find或findstr或字符替换等方式进行)
@echo off
set 服务器状态=没有启动
for /f %%i in (a.txt) do (
if /i [%%i]==[你要找的RUNNING什么的字符串] ( set 服务器状态=启动 )
)
echo %服务器状态%
作者: sunyao
时间: 2006-11-8 03:17
for /f "skip=34 delims=" %%i in ('C:\bea\weblogic91\common\bin\wlst.cmd startserver.py') do (
if /i "%i"=="RUNNING" ( set state="RUNNING" )
)
我试试行不行
作者: sunyao
时间: 2006-11-8 04:37
试过了 成功 !!!
感谢redtek兄!!!!
再看看有没有其他问题
没事 就开始做停止的脚本
作者: honhaizh
时间: 2006-11-16 20:28
学习
作者: hxuan999
时间: 2006-11-23 00:44
我正想找这个呢
作者: electronixtar
时间: 2006-11-23 07:20
都开始讨论 WebLogic 了啊,高科技~~