好了,我们还要消灭两个障碍~
我们知道批处理可以用 %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>
复制代码 原方案有误,现已修正了 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>
复制代码 示例脚本:[attach]8295[/attach] |