标题: [原创教程] 批处理之家在线 HTA 脚本 [打印本页]
作者: CrLf 时间: 2015-11-29 22:41 标题: 批处理之家在线 HTA 脚本
本帖最后由 CrLf 于 2017-3-6 10:52 编辑
从 _wscript.exe 支持 .bat 的 wscript 到 JSConsole v2.0.1 JScript控制台
再到 js/bat脚本混编新方案 、 bat、vbs、js 原生混编 、 批处理之家 js 在线脚本库
我一直在寻觅批处理的终极增强方案
但可惜的是鱼与熊掌不可兼得,要么操作繁琐,要么功能不够强大,有时候想“就这样了,反正只是批处理”。
一周前突然有点什么想法——其实早该想到的。
于是折腾出了这个能以最简洁的命令行调用批处理之家 js 在线脚本库的方案,集前作之所长,精巧而强大。
界面修改自在线第三方命令行工具下载
举几个实例感受一下:- mshta http://bathome.net/s/hta/index.html type('UTF8编码的文件.txt')|more
- ::调用 type 函数自动识别文件编码,可识别 ANSI、UTF8、UTF16(即通常说的Unicode)
-
- mshta http://bathome.net/s/hta/index.html Tools.get(\"gawk\")
- ::调用基于 Batch-CN 第三方仓库的 Tools 库实现自动判断并下载 gawk 命令(假如 %Path% 中找不到此命令的话)
- ::为了提供更佳的命令行兼容性,此页面会抛弃命令行参数中未转义的 ",此例中的 \" 即代表要保留的 "
- ::此处的 \"gawk\" 也可写为 ""gawk"" 或 'gawk'
-
- mshta "http://bathome.net/s/hta/index.html?group=math" (new XDate()).toString(\"yyyy年MM月dd日\")
- ::加载 math 列表中的库,并使用 XDate 库的 toString 方法格式化输出当前日期
-
- echo msgbox "批处理之家" | mshta "http://bathome.net/s/hta/index.html?group=vbs&echo=false" VBScript(WSH.StdIn.ReadAll())
- ::加载 vbs 列表中的库,执行来自管道的 VBS 命令,并且不显示返回值
复制代码
当然,你也可以不调用任何函数,只执行默认库列表所能完成的命令:- for /f %%a in ('mshta http://bathome.net/s/hta/index.html 12.5*3') do echo 12.5*3=%%a
复制代码
查看帮助可用 help 参数:- mshta http://bathome.net/s/hta/index.html?help
复制代码
启用调试模式可用 debug 参数,在窗口中按 F12 可呼出 FireBug 控制台:- mshta http://bathome.net/s/hta/index.html?debug
复制代码
如有出现运行异常的情况,可能是缓存所致,可尝试以下几种方法:- 1、在 URL 后添加随机数暂时避开缓存
- 例如: mshta http://bathome.net/s/hta/index.html?%random%
- 此方法仅刷新 html 页面的缓存
- 2、在 IE 中按 Alt 键,工具>删除浏览历史记录,勾选“临时 Internet 文件和网站文件”,点击删除
- 此方法可刷新所有缓存,推荐使用,但会同时清除 IE 浏览器下其他网站的缓存
- 3、有经验的坛友,可以在 IE 缓存文件夹中有选择地删除缓存文件
- 在 IE 中按 Alt 键,工具>Internet 选项>常规>设置>Internet 临时文件>查看文件
- 也可以通过 mshta http://bathome.net/s/hta/index.html newcom('Shell.Application').ShellExecute(getCacheFolderPath()) 打开
复制代码
考虑到 win10 下的兼容性,建议用完整地址调用脚本 mshta http://bathome.net/s/hta/index.html "WSH.Echo('执行你的脚本')" | findstr .
作者: CrLf 时间: 2015-11-29 22:42
本帖最后由 CrLf 于 2017-3-6 10:53 编辑
请以 mshta http://bathome.net/s/hta/index.html?help 的内容为准
用法示例
WSH 库可以模拟 WSH 宿主的环境,例如:
“ mshta "http://bathome.net/s/hta/index.html" WSH.Echo('随机数:'+Math.random()) >输出.txt ”
LoadLibs 对象中用于定义要加载的可选库,配合 freshCookie() 可在命令行中修改可选库的设置,例如:
“ mshta "http://bathome.net/s/hta/index.html" LoadLibs.hide=false;freshCookie() ”
而使用 cleanCookie() 则可清除 Cookie 中的设置,例如:
“ mshta "http://bathome.net/s/hta/index.html" cleanCookie() ”
特性须知
必选库为 mshta、WSH、GetRequest 和 RunCommand,其中 WSH 依赖 批处理之家 js 在线脚本库
为提高效率,内置了一个 MiniLibs 库,只具备 Libs 库的极少量功能
使用 debug 开关后会自动调用 loadFirebug,请在加载完毕后按 F12 呼出控制台
启用 help 和 debug 开关时,不会加载 hide 库,并强制加载 Libs 库
运行结果为 undefined 或启用 echo=false 开关时,不会运行显示结果
关键函数都集成在 $Host 对象中,请不要随意篡改 $Host 的内容——除非你了解它的作用
命令行参数中的 " 除非写为 \" 或 "",否则将被抛弃
复写 " 号作为字符串标识符时,会自动对其中的 \ 转义,例如 dir(""C:\Windows\"") 相当于 dir('C:\\Windows\\')
与 HTA混编 用法不同的是,在 http:// 协议下权限受限,部分功能可能无法工作,例如 Adodb.Stream 的 SaveToFile
url参数语法
基本语法如 http://bathome.net/s/hta/index.html?参数1=值1&参数2=值2&参数N=值N
各项参数的功能参见下表
参数=<值> | 说明 | 实例 |
debug | 调试模式,加载 loadFirebug 库并阻止 hide 库 | mshta http://bathome.net/s/hta/index.html?debug
//打开调试界面
mshta "http://bathome.net/s/hta/index.html" '批处理之家' >输出.txt
//WSH 库可模拟 WSH 环境,此例输出到标准输出句柄
mshta "http://bathome.net/s/hta/index.html" '批处理之家'
//无法输出到 StdOut 时,WSH.Echo 将输出到提示框
mshta "http://bathome.net/s/hta/index.html?group=vbs" msgbox('批处理之家')
//用 group 选项启用名为 'vbs' 的库列表,并调用 msgbox 函数
mshta "http://bathome.net/s/hta/index.html?load=Tools,hide" Tools.down('grep')
//用 load 选项指定仅加载 Tools 库和 hide 库,并下载 grep |
help | 显示帮助页面并阻止 hide 库 |
hide=<var> | var 为 false 时不加载 hide 库,否则加载 |
echo=<var> | var 为 false 时不自动显示运行结果,否则会自动调用 WSH.Echo 进行输出 |
string | 启用 string 开关后,会先将输出调用 string 函数处理成更友好的字符串再输出 |
load=<var1>,<var2>,<var3> | 要加载的库为 <var1>、<var2>、<var3> |
group=<var> | 未指定 load 时,将 LoadLibs 设为 <var> 对应的库列表
已指定 load 时,将以 <var> 为名的列表保存到 cookie 中
[预设列表]
default, base, vbs, string, iframe, debug, object, math, prototype, lodash, mootools, underscore, lazy, gui
|
Group 介绍
调用内置或自定义的组,可以快速设置 LoadLibs 为预设值,从而根据需要加载不同的库
名称:default
说明:默认列表
包含以下的库:
hide, Tools, list, Function, Prototype, DIYprototype, iconv
名称:base
说明:空列表,只加载必选库
包含以下的库:
空
名称:vbs
说明:加载和 VBS 相关的库
包含以下的库:
hide, vbs, VBScript
名称:string
说明:加载和字符串相关的库
包含以下的库:
hide, Function, iconv, Json2, csv, Ini, ch2num, difflib, strftime, sprintf
名称:iframe
说明:禁用 iframe 的提示,不隐藏界面
包含以下的库:
Zones0
名称:debug
说明:使用 Firebug 进行调试,不隐藏界面
包含以下的库:
loadFirebug
名称:object
说明:加载和对象相关的库
包含以下的库:
hide, Fuse, Blob, Json2, diff, naturalSort, taffy, XDate, XRegExp, typeName
名称:math
说明:加载和数字运算相关的库
包含以下的库:
hide, accounting, bignumber, numeric, numbers, moment, XDate, Math, sjcl
名称:prototype
说明:加载和 Prototype 库相关的库
包含以下的库:
hide, Function, DIYprototype, Prototype
名称:lodash
说明:加载和 lodash 库相关的库
包含以下的库:
hide, lodash
名称:mootools
说明:加载和 mootools 库相关的库
包含以下的库:
hide, mootools
名称:underscore
说明:加载和 underscore 库相关的库
包含以下的库:
hide, Underscore
名称:lazy
说明:加载和 lazy 库相关的库
包含以下的库:
hide, lazy
名称:gui
说明:加载和 GUI 相关的库,不隐藏界面
包含以下的库:
jQuery, KeyboardJS, Keypress, reveal
必选库
名称 | 版本 | 说明 | 大小 |
GetRequest | diy | src 用于取得URL地址中的变量 | 852Bytes |
mshta | diy | src 创建一个 mshta 对象,以获取窗口信息和改变窗口形态 | 648Bytes |
RunCommand | diy | src 将接收到的命令行参数当作 js 语句来运行 | 2KB |
WSH | diy | src 模拟一个 WSH/WScript 对象 | 5KB |
作者: CrLf 时间: 2015-11-30 23:47
欢迎反馈Bug
作者: 依山居 时间: 2015-11-30 23:58
- -我是希望默认下到当前目录.
作者: CrLf 时间: 2015-12-1 00:14
回复 4# 依山居
下载虾米?
作者: 依山居 时间: 2015-12-1 01:05
回复 5# CrLf
Tools.get(\"gawk\") 下载到当前目录怎么改?
作者: CrLf 时间: 2015-12-1 01:42
回复 6# 依山居
get 会自动判断是否需要下载,改用 down 就好了
Tools.down(\"gawk\")
或
Tools.down('gawk')
Tools.down(""gawk"")
不过最新的 Tools.js 为了适应新的架构,作了很多兼容性的改进,其中有一处修改导致目前暂时无法下载文件,修复后的文件已提交给 Batcher,等站长更新后就可以正常使用 Tools.js 了
作者: pcl_test 时间: 2015-12-1 12:13
查看帮助可用 help 参数:
mshta http://bathome.net/s/hta/?help
引用时/index.html都可省略吧?
默认加载hide库可好?
比如mshta http://bathome.net/s/hta '批处理之家',要是默认加载hide库就清爽些了
Libs库可列举库列表,但缺少列举某个库都有哪些方法的功能,要查看时还需按链接查看源码,
所以要是有个方法能列举某个库的所有方法和示例那就方便多了
作者: 回家路上 时间: 2015-12-1 13:28
本帖最后由 回家路上 于 2015-12-1 13:30 编辑
希望脚本库能由此引来一度春天。
确实,要引入这个的话,感觉帮助文档使用说明就得很清楚了。----特别是转载库
虽然是开源的,但是毕竟很多人不会JS。能方便的查看说明文档最好。而且是狠多方法都有很详细的注释和用例,但是怎么方便查看?
想想工作量很大,恨我不通JS啊。
感谢奉献。
作者: CrLf 时间: 2015-12-1 14:17
本帖最后由 CrLf 于 2015-12-1 20:58 编辑
回复 8# pcl_test
回复 8# pcl_test
默认加载的 default 列表中已经包含 hide 库,只是 debug 和 help 开关会暂时忽略 hide 罢了,因为此时就是需要查看界面的
有点困难,我有尝试过解析源码获取声明的方法和属性,目前可以做到解析源码中最外层的部分,但对更复杂机制产生的内容束手无策
我想最好的办法是笨办法,在 bathomeLibs.json 中添加每个库的方法和属性简略信息,但考虑到现在已有 65 个库…即使自写库也有 19 个之多,实在没这个精力一一写出
事实上,bathomeLibs 中还有太多我希望能实现但没精力一一实现的库,比如注册表读写、基于 WIA 的图片格式转换还有完善的 help 机制,希望有兴趣的人能够加入,前提是和自写库格式统一、代码无害/封装合理/兼容性好/相对独立
目前要查看有哪些方法没有提供针对库的文档,但可以列举所有方法,或查看某一个函数的注释,目前的办法是:- list(this)
- ::查看当前所有可用的所有外围函数和变量
-
- list($Host)
- ::查看 $Host 对象中当前所有可用的所有外围函数和变量
-
- help(this)
- ::查看当前 this 所有外层函数和变量和 window 对象的所有方法和属性
-
- help(this,true)
- ::在前一条例子的基础上额外显示对应的类型
-
- help(help)
- ::查看 help 函数的入口参数
-
- help(help,true,true)
- ::查看 help 函数的入口参数和干净的帮助信息,所有自写库均支持此用法
复制代码
执行 help(help,true,true) 将返回以下格式:- <Function> function (objArg,bShowType,bShowHelp){
- //列举指定对象的方法和属性,可用于 com 组件
- //依赖组件:TLI.TLIApplication
-
- /*
- objArg 要处理的对象
- [showType] 是否显示属性
- [showHelp] 是否显示帮助信息或具体内容
- { return Array }
- 例:
- help([])
- 返回数组的自定义方法和属性
- help([],true,true)
- 返回数组的自定义方法和属性,并注明类型和详细帮助信息
- */
-
- //部分代码修改自 http://demon.tw/programming/tli-tliapplication.html
- }
复制代码
list 和 help 的用法不止于此,详见帮助
作者: CrLf 时间: 2015-12-1 14:26
http://bathome.net/s/hta/index.html
可简写为以下任意一者
http://bathome.net/s/hta/index
http://bathome.net/s/hta/
http://bathome.net/s/hta
但最后一个写法将导致读取不了 ? 及后续开关
域名则可以是 bathome 的任意一个域名
要注意的是,只要 URL 有任何变动,都将对 index.html 使用不同的缓存
作者: CrLf 时间: 2015-12-1 21:02
Bug 已修复,刷新缓存即可见效,方法见顶楼末尾部分
作者: CrLf 时间: 2015-12-1 21:09
help 函数配合 TLI 控件还可查看 COM 组件的方法和属性
不过你得在 32 位的 mshta 下才能调用 32 位的 TLI
对于 64 位组件的方法和属性,各位有什么更好的查阅方法吗?最好能通过原生组件来实现
作者: CrLf 时间: 2016-9-25 11:30
本帖最后由 CrLf 于 2016-9-26 00:46 编辑
考虑到 win10 下的兼容性,建议用完整地址调用脚本 mshta http://bathome.net/s/hta/index.html "WSH.Echo('执行你的脚本')" | findstr .
作者: yu2n 时间: 2017-3-26 00:21
本帖最后由 yu2n 于 2017-3-26 00:30 编辑
方便好用的功能,点赞!
`
举个例子:
如果要在你的互联网小程序(批处理)中加入“解压带密码的 zip 文件”功能,你可以这样做:
`
1. 创建临时目录,切换工作目录到临时目录
2. 下载 unzip.exe 到临时目录
3. 使用 unzip.exe 解压带密码的 zip 文件
`
这仅仅需要以下几行代码:- @echo off
- :: 1. 创建临时目录,切换工作目录到临时目录
- md %temp%\host 2>nul & cd /d %temp%\host
- :: 2. 下载 unzip.exe 到临时目录
- mshta http://bathome.net/s/hta/index.html?echo=false "Tools.get('unzip')"
- :: 3. 使用 unzip.exe 解压带密码的 zip 文件
- unzip -o -P laod.org "windows用批处理.zip"
复制代码
`
更多的第三方命令行小程序在等着你~
`
在线第三方命令行工具 http://www.bathome.net/s/tool/index.html
`
`
作者: 老刘1号 时间: 2021-7-31 19:59
firebug原链接似乎失效了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |