标题: [其他] [分享]vbs配合bat实现小数运算的计算器 [打印本页]
作者: defanive 时间: 2010-6-21 15:40 标题: [分享]vbs配合bat实现小数运算的计算器
我一直很看好vbs,希望能跟bat完美结合。。。
cscript启动vbs需要一定时间,为了弥补这个缺陷,今天试试新的方法。。。
下面是一个支持小数运算的计算器
123.bat
- @echo off
- call :startvbs
- :loop
- set /p a=输入一个算式(支持小数哦):
- echo return %a%>1.txt
- call :getret ans
- echo %ans%
- goto loop
-
- :getret
- if not exist 1.txt call :err
- if not exist 2.txt goto getret
- set /p %1=<2.txt
- del /f 2.txt
- goto :eof
-
- :startvbs
- echo.>1.txt
- start /b cmd /c cscript dy.vbs //nologo 2^>nul^&del /f 1.txt
- ping -n 1 127.0.0.1 >nul
- goto :eof
-
- :err
- echo vbs发生错误>2.txt
- call :startvbs
- goto :eof
-
- :exitvbs
- echo wscript.quit>1.txt
复制代码
dy.vbs
- sf="1.txt"
- rf="2.txt"
- wait=20
-
- clearscript
- do
- wscript.sleep wait
- a=readscript
- if a<>vbcrlf then
- clearscript
- execute a
- end if
- loop
-
- function readscript()
- set f=createobject("scripting.filesystemobject").opentextfile(sf)
- readscript=f.readall
- f.close
- end function
-
- sub clearscript()
- set f=createobject("scripting.filesystemobject").opentextfile(sf,2,true)
- f.writeline
- f.close
- end sub
-
- sub return(s)
- set f=createobject("scripting.filesystemobject").opentextfile(rf,2,true)
- f.writeline s
- f.close
- end sub
复制代码
运行123.bat即可,输入小数算式(例如12.3+45.6),即可看到结果。。。
别看代码很长,实际上dy.vbs是不需要改的,123.bat也只需要改主体和err标签即可
startvbs用于启动vbs(一般在批处理开始时调用一次)
需要运行的代码用echo ...>1.txt即可运行
getret用于取得运行的结果
err用于vbs的出错处理
exitvbs用于退出vbs
例如主体部分可以改成下列代码(其余标签不变):
- @echo off
- call :startvbs
- :loop
- set /p a=输入一个算式(支持小数哦):
- echo return %a%>1.txt
- call :getret ans
- echo return msgbox("答案是%ans%")>1.txt
- call :getret
- goto loop
复制代码
就可以实现将答案显示在弹出对话框中。。。
还可以实现选择文件夹,总之vbs可以做到,bat就能做到:
- @echo off
- call :startvbs
- echo 请选择一个文件夹
- echo return createobject("Shell.Application").browseforfolder(0,"选择目录:",0,0).self.path>1.txt
- call :getret fn
- echo %fn%
- pause
- call :exitvbs
- goto :eof
复制代码
作者: defanive 时间: 2010-6-21 15:46
另外说明一下,getret要得到结果,echo ...>1.txt中要使用return语句
另外,echo ...>1.txt可以一次执行多行,如下:- @echo off
- call :startvbs
- set /p a=请输入第一个数:
- set /p b=请输入第二个数:
- (echo a=%a%
- echo b=%b%
- echo return a+b
- )>1.txt
- call :getret ret
- echo 和为:%ret%
- pause
- call :exitvbs
- goto :eof
复制代码
作者: defanive 时间: 2010-6-22 00:36
好吧,为什么没人理我。。。
杯具,顶起。。。
作者: sgaizxt001 时间: 2010-6-22 08:46
不懂VBS,路过帮你顶一下
书上说的是C语言支持的运算符号是最多的,你把C++的math.h库函数弄弄,做成第3方,然后用bat调用如何
我这几天看那个看的头晕,格式太多啦,完全转不过来
[ 本帖最后由 sgaizxt001 于 2010-6-22 08:50 编辑 ]
作者: 523066680 时间: 2010-6-22 10:14 标题: 回复 3楼 的帖子
好吧,因为习惯了用cscript 模式 实现cmd那种交互,又能有vbs的功能。并且又同是vbs的变量
可以根据要求做更多的配合计算。
[ 本帖最后由 523066680 于 2010-6-22 10:19 编辑 ]
作者: Spring 时间: 2010-6-22 11:03
"cscript启动vbs需要一定时间,为了弥补这个缺陷"......
那你一直频繁的读写文件不也是一个大大的缺陷么。。。。
作者: zqz0012005 时间: 2010-6-22 21:23
"cscript启动vbs需要一定时间,为了弥补这个缺陷"......
不知道楼主要表达什么,你自己不还是用了cscript+临时文件?舍近求远?
一般来说,只要学会了vbs的人,应该都知道vbs与bat结合的方法吧?早已不算新方法了。
也许是想做一个通用的架构,但显然不太合适的。
曾经搞了一个vbs版的CMD,利用 WScript的StdIn/StdOut/StdErr 标准流 及exec方法返回的WshScriptExec对象,对ReadLine进行解析再调用相应函数或命令,发现还是不够方便,而且有些情况无法处理,后来扔下不搞了。有时间再找出来一起玩玩。
作者: defanive 时间: 2010-6-22 21:56
我的意思是,传统的方法是需要执行一次vbs代码就调用一次cscript,而cscript启动vbs需要一段时间,所以效率总是提不上去。。。
而顶楼的方法是,启动一次cscript,让vbs一直存活并等待批处理的命令,得到命令就立即返回,效率高很多。。。
作者: 523066680 时间: 2010-6-22 22:46 标题: 回复 8楼 的帖子
类似读脚本或者解读指令的方式嘛。 应该是因为挺多学习过vbs的人实践过.....
临时用的供调用的
set inp=wscript.stdin
set put=wscript.stdout
put.writeline "the result save to x"
while true
put.write "Test:"
yousay=inp.readline
if yousay="exit" then
wscript.quit
end if
x=eval(yousay)
put.writeline "x=" & x
wend
========================
x记录上一次计算的值 ,可以再下次式子中加入x 。
额,只附加了x,没有其他机制, 另外有个eval.bat 调用它并进入vbs循环 ,这样我就不用输入 cscript //nologo 了.....
[ 本帖最后由 523066680 于 2010-6-22 22:50 编辑 ]
作者: zqz0012005 时间: 2010-6-22 23:13 标题: 回复 7楼 的帖子
找到了!
vbs版cmd
http://www.bathome.net/thread-8313-1-1.html
作者: BowAngel 时间: 2010-6-23 10:22
如果我现在需要把vbs的返回值存入批处理的一个变量中,如果不利用临时文件,不知道能不能实现?
作者: defanive 时间: 2010-6-24 00:24 标题: 回复 11楼 的帖子
应该不可能。。。
vbs与bat结合肯定有更好的方法。。。
总不能在实验阶段停下,实际上vbs与bat结合实际应用很少。。。
作者: Batcher 时间: 2010-6-24 11:47 标题: 回复 12楼 的帖子
vbs与bat结合在实际工作中应用很多
作者: batman 时间: 2010-6-26 10:18
支持batcher,事实上本人在工作经常用vbs+bat来处理问题。。。
作者: defanive 时间: 2010-6-26 18:17
但是效率?
难道调用一次vbs就cscript一次?效率可想而知。。。
作者: zqz0012005 时间: 2010-6-26 18:54 标题: 回复 15楼 的帖子
一般不是只调用一两次vbs就够了吗?否则的话,可能是你的程序设计的不够好。
事实上如果在bat中要用到vbs的话,我一般直接用vbs实现全部功能,不再通过bat来调用,除非用bat确实能带来便利。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |