首先,先简单讲讲这个 bat+vbs混合编程 究竟是什么意思:它的大概意思就是一个以bat
为后缀名的文件,可以同时被cmd和WSH解析,也就是既可以直接当作批处理来运行,也可以
被直接当成vbs或者vbe文件来运行。
总是感觉bat可以实现的功能,相对来说还有点弱,但若加上vbs的话,那前途就不可估量了...
至于bat和vbs的混合编程,dos联盟里的est曾经发起讨论过,最后采用的方案是:给bat语句前加个"帽子"
echo '>nul&,因为echo错误在vbs中尚可以忽略。
近期,我对bat+vbs混合编程再次感了兴趣,于是,又去思考、尝试了很多种的方法,略举几种:
1、对est方案的改进:在文件中构造echo函数,这样就不用专门让WSH专门去“抛弃”错误,不过此种方法
也是无法避免产生大量的垃圾代码,其具体方法就是在文件开头书写:
- ::Function echo()
- ::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 &,这样无疑又引入了大量的无意义代码...
样本代码:
- Rem ========以下书写bat代码=================
- ' 2>nul&cls&@echo off & echo This is a test!
- ' 2>nul&for /l %%i in (1 1 10) do (
- ' 2>nul&echo ok)
- ' 2>nul&CScript.EXE "%~dpnx0" //Nologo //e:vbs &exit
- '===============这里书写vbs代码=============
- msgbox "This is a test!",vbokonly,"Hello,world"
复制代码
|