[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

批处理和VBS混合编程

首先,先简单讲讲这个 bat+vbs混合编程 究竟是什么意思:它的大概意思就是一个以bat
为后缀名的文件,可以同时被cmd和WSH解析,也就是既可以直接当作批处理来运行,也可以
被直接当成vbs或者vbe文件来运行。

总是感觉bat可以实现的功能,相对来说还有点弱,但若加上vbs的话,那前途就不可估量了...
至于bat和vbs的混合编程,dos联盟里的est曾经发起讨论过,最后采用的方案是:给bat语句前加个"帽子"
echo '>nul&,因为echo错误在vbs中尚可以忽略。

近期,我对bat+vbs混合编程再次感了兴趣,于是,又去思考、尝试了很多种的方法,略举几种:
1、对est方案的改进:在文件中构造echo函数,这样就不用专门让WSH专门去“抛弃”错误,不过此种方法
也是无法避免产生大量的垃圾代码,其具体方法就是在文件开头书写:
  1. ::Function echo()
  2. ::End Function
复制代码

2、第二种方案曾经是想用doskey将“'”定义成“'=echo bathome>nul &”,这样就可以让vbs和批处理
同时认识“'”,并且各自按照各自的方式去解析(应该说,这种方案是比较完美的方案),只可惜,doskey
不能在批处理文件中使用(无法加载进系统缓存,除非在autoexec.bat中添加上面那段代码,所以有兴趣
的朋友还是可以从这里入手的),该计划胎死腹中...
3、后来还想通过从标签,公共的rem,call入手,不过最后都没有突破...
再后来,又回到了est的想法,不过想来想去,对命令容错能力不管怎么样,都应该是bat厉害点,所以与其让
vbs去抛弃错误,还不如让bat来除错,于是就想到了 ' 2>nul& 此句在vbs中被用来当作注释,在bat中是个错
误的命令,但是错误结果被屏蔽...
此种方法的优点:把容错的任务交给了bat ,“减轻了vbs的负担”,对于较多的代码行,执行效率相对较高;
缺点:在bat语句前面还是要加上' 2>nul &,这样无疑又引入了大量的无意义代码...
样本代码:
  1. Rem ========以下书写bat代码=================
  2. ' 2>nul&cls&@echo off & echo This is a test!
  3. ' 2>nul&for /l %%i in (1 1 10) do (
  4. ' 2>nul&echo ok)
  5. ' 2>nul&CScript.EXE "%~dpnx0" //Nologo //e:vbs &exit
  6. '===============这里书写vbs代码=============
  7. msgbox "This is a test!",vbokonly,"Hello,world"
复制代码
1

评分人数

    • novaa: 精神可加啊。!PB + 6

有点疑问。就是后缀为.bat。不会去利用VBS啊。
我测试不行啊。
解释脚本的引擎不同。
ㄗs:A good programming is 99% sweat and 1% coffee!--①個亾

============ >   hi.baidu.com/novaa   <============

TOP

仍不太懂,就是在bat文件里写vbs代码吗?
运行时不产生。vbs文件是吗?
技术问题请到论坛发帖求助!

TOP

回复 2# 的帖子

是,我们要调用vbs,一般是生成vbs临时文件,而这个就不用了
也就是它本身既可以当成 vbs文件,也可以当成bat文件,呵呵

TOP

厉害呀,看了半天还是看不懂!
不大可能的事也许今天实现,根本不可能的事也许明天会实现

TOP

完全看不懂...看来我还是先看一点新手的才行```

TOP

完全理解 主要目的就是不生成临时文件 用 CScript.EXE  做vbs引擎 因为vbs以 ' (单引号)做注释 所以前面的会忽略

TOP

就是这两个参数不明白 CScript.EXE  //Nologo //e:vbs
CScript.EXE  还有哪些参数?

TOP

icrosoft (R) Windows Script Host Version 5.6
版权所有(C) Microsoft Corporation 1996-2001。保留所有权利。

用法:CScript scriptname.extension [option...] [arguments...]

选项:
//B         批模式:不显示脚本错误及提示信息
//D         启用 Active Debugging
//E:engine  使用执行脚本的引擎
//H:CScript 将默认的脚本宿主改为 CScript.exe
//H:WScript 将默认的脚本宿主改为 WScript.exe (默认)
//I         交互模式(默认,与 //B 相对)
//Job:xxxx  执行一个 WSF 工作
//Logo      显示徽标(默认)
//Nologo    不显示徽标:执行时不显示标志
//S         为该用户保存当前命令行选项
//T:nn      超时设定秒:允许脚本运行的最长时间
//X         在调试器中执行脚本
//U         用 Unicode 表示来自控制台的重定向 I/O

TOP

CScript 和 WScript 两个功能完全一样 为什么要出现两个呢

TOP

WScript 图形界面模式 CScript 命令行模式 但是我怎么感觉两个差不多

TOP

回复 11# 的帖子

当你要 用 批处理 来接受脚本传回来的结果时,你就不会说一样了

TOP

像你这么写起来太臃肿了 还不如生成临时文件

TOP

回复 1# 的帖子

不懂vbs 请问 vbs 中有没有 类似bat中 goto 这样的语句?
技术问题请到论坛发帖求助!

TOP

没有...

TOP

返回列表