快速业务通道

让批处理被wsh解析的代码

作者 佚名 来源 批处理 浏览 发布时间 2013-07-09
示例批处理:test.bat
复制代码 代码如下:

:OnErrorResumeNext
Subbat
echooff&cls
echoBatching_codez_here_following_vbs_rules&pause
startwscript-e:vbs"%~f0"
ExitSub
EndSub
MsgBox"Thisisvbs"

上面的代码巧妙利用bat和vbs的语法特征,让同一个文件,被cmd.exe识别成批处理,让wscrpt.exe识别成vbs,并且同时符合两者的语法,并且保证都没有错误,保证两者的高度兼容。就叫它bat/vbs复合编程吧(HybirdProgramming)
粗略解释下代码
引用:
:OnErrorResumeNext
cmd.exe识别成一段注释
wscript.exe这样识别,:在vbs语法里代表分行,然后OnErrorResumeNext,也就是让WSH忽略一些错误
引用:
startwscript-e:vbs"%~f0"
cmd.exe识别成:启动wscript.exe,其参数是:
①-e:vbs设定以vbs解析文件自身
②"%~f0"指这个批处理本身。
wscript.exe把这句识别成:调用一个叫start的函数,函数参数是wscript这个变量,然后用这个函数的结果来减去e。接下来是又是一个:,分行,然后又是调用一个名叫vbs的函数,参数是字符:"%~f0"
这句是最为精巧的,因为它成功的让vbs引擎解释了一段批处理,而且没有错误!当然这些start()、vbs()函数是不存在的,但是会被cmd.exe当成命令执行。为什么不用wscript//e:vbs"%~f0"来执行呢?vbs解析会出错的,呵呵

这段代码的核心思想已经介绍完毕了。下面,为了让批处理以vbs调用其自身后,马上退出,我们需要exit或者goto:eof,但是gotocallexit在vbs又是一个关键词,所以我们只能用符合vbs语法的exitsub,所以我们在第二句加一个
subbat,其实cmd.exe寻找了一个叫sub.exe的命令,但是这个命令是不存在的,cmd.exe跳过。然后在6、7句加一个exitsub以及endsub,让批处理结束,同时又符合vbs的语法

那个echooff&cls,批处理的意思就是相当于@echooff,但是vbs不认@符号,所以改成echooff&cls,vbs可以解析为,调用一个叫echo()的函数,参数为off&cls,也就是两个字符串off和cls相加

Well,接下来,你可以自由地在批处理中书写vbs脚本了,效率和真正的vbs一样高!

这段代码的好处是:不用生成临时文件。其实用echo或者more或者find来生成临时vbs很浪费系统资源的,用我写的这段代码,就完全免去了这些麻烦。直接混合编程,以startwscript-e:vbs"%~f0"为界限,上面写批处理,下面写vbs,并行不悖!
大家有更好的想法可以跟贴讨论呀
allyesno:%~fI-将%I扩充到一个完全合格的路径名
另外如果用到shell中的话写vbs也要用到echo的在这种情况没有省系统资源的说法除非copycon就可以写那就直接写任意脚本文件就行了
其他的情况是有的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号