[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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的参数,
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

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

TOP

3# myzam
多谢,你的回答。我也仅仅是出于好奇而以,在看博客时也仅发现一个参数,但因为感到其不全,所以也没细看(而且单词还不好背)。现在一想,真是悔啊
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

双引号的转义是不是和%的转义差不多呢?

TOP

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

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

TOP

window.close 和 self.close 到底有什么区别?
百度了几圈都没找到答案,别说都一样

TOP

回复 7# 不知道是谁


    window.self、window.top、window 一般来说是指向同一个对象(除非在框架中)
同时,因为默认情况下 window 是变量作用域,所以 window.self 可以简写 self
所以一般来说这几个是一样的:
  1. window.close
  2. window.top.close
  3. window.self.close
  4. top.close
  5. self.close
  6. close
复制代码
但是如果你用了框架,比如 iframe,那子框架中的 window 就是它自己,而 top 则是指最顶级窗口的 window
2

评分人数

TOP

本帖最后由 kaze 于 2018-11-11 13:31 编辑

回复 8# CrLf
请问如何把变量%num%传入vbs代码内呢?
感谢zaqmlp已解决该问题!
zaqmlp 2018-11-11 12:54  NEW
<!-- :
@echo off
:Main
set num=
set /p num=输入(数字):
if not defined num goto Main
echo;%num%|mshta "%~f0"
exit
-->

<script>
var fso = new ActiveXObject("Scripting.FileSystemObject");
var StdIn = fso.GetStandardStream(0);
var StdOut = fso.GetStandardStream(1);
var list=StdIn.ReadLine();
var url = "http://music.taihe.com/album/"+list+"/";
alert(url);
close();
</script>

TOP

因为ren要改,所以要关闭文件夹1句,然后再打开之前的关闭文件夹1句,mshta vbscript给高手写下

TOP

或者通过BJ混排,直接把js脚本写到批处理里面。同样能达到类似目的。
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

math只能调用 html和vbs吗

TOP

返回列表