• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    bat、vbs、js 原生混编(一个bat可以执行vbs,js代码)

    发现 mshta 会把 file:// 协议指向的文件当作 html 来解析(注:IUnknown 与 happyxxdhaha 提醒此处必需使用绝对路径,否则不会执行),心里顿时有一万只草泥马奔过,原来如此简单的答案就在身边,却错过了四年

    基本框架:

    复制代码 代码如下:

    !-- : bathome
    @echo off
    echo I'm Batch!
    mshta "file://%~f0"
    pauseexit
    使用注释标签囊括批处理部分,条件是批处理部分不能出现注释标签的结束符
    -->
    script language=vbs>
    Msgbox "I'm VBScript!"
    /script>
    script>
    alert("I'm JavaScript!")
    /script>
    script>close()/script>

    事实上,file:// 协议名可以省略,而且如果不需要理会界面的话,完全可以不用注释标签:

    复制代码 代码如下:

    @echo off
    echo I'm Batch!
    mshta "%~f0" nul
    pauseexit
    批处理部分之后要加上一串 >,数量要比前文出现的 更多,mshta 才能区分哪些是标签
    而且前文出现从文件获取重定向输入的时候,建议加上双引号,例如 "script"
    >>>>>>>>>>>>>>
    script language=vbs>
    Msgbox "I'm VBScript!"
    /script>
    script>
    alert("I'm JavaScript!")
    /script>
    script>close()/script>

    另一用 goto 的种写法可能更直观一点:

    复制代码 代码如下:

    @goto :bat
    script language=vbs>
    Msgbox "I'm VBScript!"
    /script>
    script>
    alert("I'm JavaScript!")
    /script>
    script>close()/script>
    :bat
    @echo off
    echo I'm Batch!
    mshta "%~f0" nul
    pauseexit

    要注意的是,这里的宿主是 mshta,所以不支持 WSH 宿主的方法和属性(部分属性或方法的替代方案详见后文)
    但是!mshta 有嘛不好!
    原生支持 setTimeout
    原生支持 iframe
    原生支持 dom
    原生支持 javascript、vbscript 无障碍交互
    原生支持 Ajax
    原生支持加载外部脚本
    原生支持在窗口中选择文件
    原生支持复杂的页面交互
    ...
    有这么多便利,那还计较什么呢?
    首发于批处理之家
    ------------------------------------------------------------------------------------------------------------
    关于 mshta 宿主的一些知识,参考: https://msdn.microsoft.com/en-us/library/ms536495(VS.85).aspx
    感谢 xiaopo 扫盲,才知道联盟早已出现过 mshta 方案的雏形:http://cndos.fam.cx/forum/viewthread.php?tid=39655,回头上镜像站搜下,看看有没有进一步的发展

    复制代码 代码如下:

    :!--
    ::::::::::::::::::::::::::::::::BAT::::::::::::::::::::::::::::::::

    ::::::::1.执行HTML代码之前的BAT代码::::::::
    @echo off
    call :e Starting mshta...
    pause
    ::::::::1.执行HTML代码之前的BAT代码::::::::

    ::执行HTML代码:
    start mshta %0

    ::::::::2.执行HTML代码之后的BAT代码::::::::
    call :e Mshta is executing HTML codes...
    pause
    ::::::::2.执行HTML代码之后的BAT代码::::::::

    ::退出BAT:
    exit/b

    :::::::BAT函数定义部分:::::::
    :e
    echo %*
    goto :eof
    :::::::BAT函数定义部分:::::::

    ::::::::::::::::::::::::::::::::BAT::::::::::::::::::::::::::::::::
    -->

    !--此句用来清除第一行的:-->
    script>document.body.innerText=""/script>

    !--------------------------HTML-------------------------->
    body onkeypress=window.close()>
    hr color=red>
    marquee>font color=green>HTML Codes/font>/marquee>
    hr color=red>
    !--------------------------HTML-------------------------->

    !-- BAT HTML {s11ss@www.cn-dos.net/forum 2008-4-22}
    思路:当此文件被当作BAT文件执行时,未执行到HTML代码部分时就已退出;
    当此文件被当作HTML文件执行时,BAT代码部分被注释,不会被执行。
    -->

    上一篇:批处理添加多个新的域名到hosts
    下一篇:Windows命令行bat批处理延迟sleep方法(批处理延时)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    bat、vbs、js 原生混编(一个bat可以执行vbs,js代码) bat,vbs,原生,混编,一个,可以,