收藏本站 收藏本站
积木网首页 - 软件测试 - 常用手册 - 站长工具 - 技术社区
首页 > DOS命令 > 正文

首页 - PHP - 数据库 - 操作系统 - 游戏开发 - JS - Android - MySql - Redis - MongoDB - Win8 - Shell编程 - DOS命令 - jQuery - CSS样式 - Python - Perl

Access - Oracle - DB2 - SQLServer - MsSql2008 - MsSql2005 - Sqlite - PostgreSQL - node.js - extjs - JavaScript vbs - Powershell - Ruby

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

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

基本框架:

<!-- : bathome

@echo off

echo I'm Batch!

mshta "file://%~f0"

pause&exit

使用注释标签囊括批处理部分,条件是批处理部分不能出现注释标签的结束符

-->

<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

pause&exit

批处理部分之后要加上一串 >,数量要比前文出现的 < 更多,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

pause&exit

要注意的是,这里的宿主是 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代码部分被注释,不会被执行。 -->

Windows命令行bat批处理延迟sleep方法(批处理延时)
Windows下批处理文件没有像Linux一样的Sleep函数进行延时处理,这里有2种较为实用的方法实现延迟:1、使用WScirpt的sleep功能,精度0.001秒创建vbs延迟文件

Ghost安装Win7/XP后自动恢复IP的批处理代码(ip备份恢复)
今天维护人员找的我说,最近要推Win7了,暂时桌面云没推广,还是使用手动安装Win7的方式。所以,需要我帮忙写一个脚本,大概功能就是在GhostWin7之前

Windows下通过bat获取网络连线实际名称,加强IP类设置脚本的兼容性
其中比较难解决的问题就是获取网络连线的实际名称,大部分人使用的IP设置脚本都是将【本地连接】写死在代码中,可实际上并不是所有电脑都叫本地

本周排行

更新排行

强悍的草根IT技术社区,这里应该有您想要的! 友情链接:b2b电子商务
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP备05050695号