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

[分享]批处理调用mshta执行vbs代码的方法

本帖最后由 pcl_test 于 2016-7-18 20:15 编辑

本文为原创。把这里的代码直接复制到cmd窗口运行就可以了。
mshta是用来解释hta程序的,或者叫hta程序的宿主。而hta程序其实就是html文件。所以你只要输入html标签就可以了。这是标准用法,其它的用法太乱。在cmd中输入下面的文字:
  1. mshta vbscript:"<html style=background:buttonface><title>作者:myzam 2011-3-18</title><body>hello world<br/>hello<hr/>world<script language=vbscript>msgbox (123)</script></body></html>"
复制代码
引号中再来引号怎么办?

mshta vbscript:"msgbox ("hello world")"
这样用会报错。解决的办法是采用双双引号。也就是说看实例:
  1. mshta vbscript:"<html ><title>test</title><body>hello world <script language='vbscript'>msgbox (""hello world"") </script></html>"
复制代码
注意这两句的细微差别。它们都能成功执行。
  1. mshta vbscript:"<html ><title>test</title><body>hello world <script language=""vbscript"">msgbox (""hello world"") </script></html>"
复制代码
如果你不喜欢那个弹出的hta窗口,那就加一句话window.close或self.close
  1. mshta vbscript:"<html ><title>myzam</title><body>hello world <script language=""vbscript"">msgbox (""hello world""):windwo.close </script></html>"
复制代码
如果你要注释掉脚本中的语句也好办,看代码:
  1. mshta vbscript:"<html ><title>myzam</title><body>hello world <script language=""vbscript"">msgbox (""hello world""):'windwo.close </script></html>"
复制代码
就这么简单。
如果你怀疑这种标准用法,就在看一个脚本吧
  1. mshta vbscript:"<script language=vbs>set myzam=createobject(""sapi.spvoice""):myzam.speak ""hello world 日本地震了啊""</script>"
复制代码
按这种标准写法,你想在cmd中写多长的脚本都可以,但是我想没人喜欢在cmd中写那种长脚本。当然以此为依据可以简化在cmd 中的输入,比如标签<html>可以不写出来等等。
如果要在bat中运行vbs我想这是一种比较自然的方法。下面给出一个bat程序
  1. @echo off
  2. cmd /c mshta vbscript:"<script language='vbscript'>msgbox (""hello
  3. world""):self.close</script>"
复制代码
其实,上面的bat根本就不需要cmd /k,直接保存为bat 点击就可以运行。这与其它的
bat有这么一点细微的差别。
  1. @echo off
  2. mshta vbscript:"<script language='vbscript'>msgbox (""hello
  3. world""):self.close</script>"
复制代码
最后:1#####hta文件的宿主----mshta
                      html的宿主-----IE
                      VBS的宿主----wscrit
                      asp的宿主----IIS
                      BAT的宿主---cmd
                      vba的宿主是---office
         2#####mshta语法
         vbs脚本时
            mshta vbscript:"html标签"
         js脚本时
            mshta jscript:"html标签"
          说明:第一,不要换行
                   第二,标签属性可以用单引号,也可以不用引号,如果要用双引号,那么  双引号请该为双双引号
                   第三,遇到字符串,请用双双引号。
                   第四,如果要从参数的角度讲的话,mshta后面的都可以叫参数。
                     事实上mshta后面的就是参数。

总之,玩mshta命令就是玩的是html标签。
good luck!


--------------------------------------------------
可接受环境变量
  1. @echo off
  2. set t="<script language=vbs>msgbox 123:self.close</script>"
  3. mshta vbscript:%t%
复制代码
到此,在bat中使用vbs得到了完全解决。从此可以在bat和vbs间自由的航行了。
3

评分人数

mshta 说真的我从来没看到过它的说明文档。说以它的参数,我也不知道。如果要说有的话,那就是这样的一个格式:
  mshta vbscript: " 这里写入html文本,但不要换行  "
   mshta jscript:"   这里写入html文本   "
这么写也是我自己从宿主的角度想出来的。

TOP

本帖最后由 myzam 于 2011-3-20 11:56 编辑

我认为这不是转义。
应该是起到字符串连接的作用。
"a""b"
其实,只要有双双引号就足够用了。
我记得在cmd中我们爱讨论 echo %%%%%abc%%%%%
但在编程中我们都不会这么去用。

TOP

返回列表