好了,我们还要消灭两个障碍~
我们知道批处理可以用 %1~%9 获取切分好的命令行参数,mshta 则没有直接的办法来获取
另一方面,mshta 是个 GUI 宿主,如果不能较好地和控制台交互,调用 mshta 将束手束脚
好在,这些都是可以解决的
-----------------------------------------------------
1、命令行参数的实现
获取 mshta 的启动参数先要创建一个 HTA:APPLICATION 标签,并设置一个 id,例如:<HTA:APPLICATION id=mshta></HTA>
这里以 id=mshta 为例,可以用 mshta.commandLine 获取未切分的命令行参数
然后就可以按 windows 的规则来解析,例如: | <script>var argv = getopts(mshta.commandLine) | | for(var i=0;i<argv.length;i++)alert(argv[i]) | | | | function getopts(strArg){ | | var re = /[^"\s,;=]*"([^"]*("[^"\s,;=]*")*)*("[^"\s,;=]*|$)|[^"\s,;=]+/g | | var argv = [] | | strArg.replace(re,function($0){argv.push($0.replace(/^"(.*)"$/g,'$1'))}) | | return argv | | } | | </script>COPY |
原方案有误,现已修正了 getopts 的实现方式,正则自己写,爽爽的
示例脚本:[attach]9005[/attach]
-----------------------------------------------------
2、StdIn、StdOut、StdErr 的实现
使用 fso 控件的 GetStandardStream 方法可实现(由 terse 传授,详见原帖)
得到的对象与 WScript 中的 StdIn、StdOut、StdErr 有完全相同的方法和属性,例如: | <script>var fso = new ActiveXObject('Scripting.Filesystemobject') | | | | var StdIn = fso.GetStandardStream(0), | | StdOut = fso.GetStandardStream(1), | | StdErr = fso.GetStandardStream(2) | | | | alert(StdIn.ReadAll()) | | StdOut.Write('标准输出测试') | | StdErr.Write('错误输出测试')</script>COPY |
示例脚本:[attach]8295[/attach] |