批处理之家's Archiver

CrLf 发表于 2015-11-29 22:41

批处理之家在线 HTA 脚本

[i=s] 本帖最后由 CrLf 于 2017-3-6 10:52 编辑 [/i]

从 [url=http://www.bathome.net/thread-29918-1-1.html]_wscript.exe 支持 .bat 的 wscript[/url] 到 [url=http://www.bathome.net/thread-30886-1-1.html]JSConsole v2.0.1 JScript控制台[/url]
再到 [url=http://www.bathome.net/thread-33125-1-1.html]js/bat脚本混编新方案[/url] 、 [url=http://www.bathome.net/thread-34109-1-1.html]bat、vbs、js 原生混编[/url] 、 [url=http://www.bathome.net/thread-34544-1-1.html]批处理之家 js 在线脚本库[/url]
我一直在寻觅批处理的终极增强方案 :D
但可惜的是鱼与熊掌不可兼得,要么操作繁琐,要么功能不够强大,有时候想“就这样了,反正只是批处理”。

一周前突然有点什么想法——其实早该想到的。
于是折腾出了这个能以最简洁的命令行调用批处理之家 js 在线脚本库的方案,集前作之所长,精巧而强大。
界面修改自[url=http://www.bathome.net/thread-36408-1-1.html]在线第三方命令行工具下载[/url]

举几个实例感受一下:[code]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 命令,并且不显示返回值[/code]当然,你也可以不调用任何函数,只执行默认库列表所能完成的命令:[code]for /f %%a in ('mshta http://bathome.net/s/hta/index.html 12.5*3') do echo 12.5*3=%%a[/code]查看帮助可用 help 参数:[code]mshta http://bathome.net/s/hta/index.html?help[/code]启用调试模式可用 debug 参数,在窗口中按 F12 可呼出 FireBug 控制台:[code]mshta http://bathome.net/s/hta/index.html?debug[/code]如有出现运行异常的情况,可能是缓存所致,可尝试以下几种方法:[code]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()) 打开[/code][size=5][color=Red]考虑到 win10 下的兼容性,建议用完整地址调用脚本 mshta [url]http://bathome.net/s/hta/index.html[/url] "WSH.Echo('执行你的脚本')" | findstr .[/color][/size]

CrLf 发表于 2015-11-29 22:42

[i=s] 本帖最后由 CrLf 于 2017-3-6 10:53 编辑 [/i]

请以 mshta [url]http://bathome.net/s/hta/index.html?help[/url] 的内容为准

[b][size=5]用法示例[/size][/b]

[quote]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() ”
[/quote]


[b][size=5]特性须知[/size][/b]

[quote]必选库为 mshta、WSH、GetRequest 和 RunCommand,其中 WSH 依赖 [url=http://bathome.net/thread-34544-1-1.html]批处理之家 js 在线脚本库[/url]

为提高效率,内置了一个 MiniLibs 库,只具备 Libs 库的极少量功能

使用 debug 开关后会自动调用 loadFirebug,请在加载完毕后按 F12 呼出控制台

启用 help 和 debug 开关时,不会加载 hide 库,并强制加载 Libs 库

运行结果为 undefined 或启用 echo=false 开关时,不会运行显示结果

关键函数都集成在 $Host 对象中,请不要随意篡改 $Host 的内容——除非你了解它的作用

命令行参数中的 " 除非写为 \" 或 "",否则将被抛弃

复写 " 号作为字符串标识符时,会自动对其中的 \ 转义,例如 dir(""C:\Windows\"") 相当于 dir('C:\\Windows\\')

与 [url=http://bathome.net/thread-34109-1-1.html]HTA混编[/url] 用法不同的是,在 http:// 协议下权限受限,部分功能可能无法工作,例如 Adodb.Stream 的 SaveToFile [/quote]


[b][size=5]url参数语法[/size][/b]

[quote]基本语法如 [url=http://bathome.net/s/hta/index.html?]http://bathome.net/s/hta/index.html?[/url]参数1=值1&参数2=值2&参数N=值N
各项参数的功能参见下表

[table]
[tr][td]参数=<值>[/td][td]说明[/td][td]实例[/td][/tr]
[tr][td]debug[/td][td]调试模式,加载 loadFirebug 库并阻止 hide 库[/td][td=1,8]mshta [url=http://bathome.net/s/hta/index.html?debug]http://bathome.net/s/hta/index.html?debug[/url]
//打开调试界面

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 [/td][/tr]
[tr][td]help[/td][td]显示帮助页面并阻止 hide 库[/td][/tr]
[tr][td]hide=<var>[/td][td]var 为 false 时不加载 hide 库,否则加载[/td][/tr]
[tr][td]echo=<var>[/td][td]var 为 false 时不自动显示运行结果,否则会自动调用 WSH.Echo 进行输出[/td][/tr]
[tr][td]string[/td][td]启用 string 开关后,会先将输出调用 string 函数处理成更友好的字符串再输出[/td][/tr]
[tr][td]load=<var1>,<var2>,<var3>[/td][td]要加载的库为 <var1>、<var2>、<var3>[/td][/tr]
[tr][td]group=<var>[/td][td]未指定 load 时,将 LoadLibs 设为 <var> 对应的库列表
已指定 load 时,将以 <var> 为名的列表保存到 cookie 中
[预设列表]
default, base, vbs, string, iframe, debug, object, math, prototype, lodash, mootools, underscore, lazy, gui
[/td][/tr]
[/table][/quote]


[b][size=5]Group 介绍[/size][/b]

[quote]调用内置或自定义的组,可以快速设置 LoadLibs 为预设值,从而根据需要加载不同的库


名称:[b]default[/b]
说明:默认列表
包含以下的库:
hide, Tools, list, Function, Prototype, DIYprototype, iconv

名称:[b]base[/b]
说明:空列表,只加载必选库
包含以下的库:


名称:[b]vbs[/b]
说明:加载和 VBS 相关的库
包含以下的库:
hide, vbs, VBScript

名称:[b]string[/b]
说明:加载和字符串相关的库
包含以下的库:
hide, Function, iconv, Json2, csv, Ini, ch2num, difflib, strftime, sprintf

名称:[b]iframe[/b]
说明:禁用 iframe 的提示,不隐藏界面
包含以下的库:
Zones0

名称:[b]debug[/b]
说明:使用 Firebug 进行调试,不隐藏界面
包含以下的库:
loadFirebug

名称:[b]object[/b]
说明:加载和对象相关的库
包含以下的库:
hide, Fuse, Blob, Json2, diff, naturalSort, taffy, XDate, XRegExp, typeName

名称:[b]math[/b]
说明:加载和数字运算相关的库
包含以下的库:
hide, accounting, bignumber, numeric, numbers, moment, XDate, Math, sjcl

名称:[b]prototype[/b]
说明:加载和 Prototype 库相关的库
包含以下的库:
hide, Function, DIYprototype, Prototype

名称:[b]lodash[/b]
说明:加载和 lodash 库相关的库
包含以下的库:
hide, lodash

名称:[b]mootools[/b]
说明:加载和 mootools 库相关的库
包含以下的库:
hide, mootools

名称:[b]underscore[/b]
说明:加载和 underscore 库相关的库
包含以下的库:
hide, Underscore

名称:[b]lazy[/b]
说明:加载和 lazy 库相关的库
包含以下的库:
hide, lazy

名称:[b]gui[/b]
说明:加载和 GUI 相关的库,不隐藏界面
包含以下的库:
jQuery, KeyboardJS, Keypress, reveal[/quote]


[b][size=5]必选库[/size][/b]

[quote][table]
[tr][td]名称[/td][td]版本[/td][td]说明[/td][td]大小[/td][/tr]
[tr][td]GetRequest[/td][td][url=http://www.bathome.net/lib/diy/GetRequest.js]diy[/url][/td][td][url=http://www.bathome.net/redirect.php?goto=findpost&ptid=34544&pid=163493]src[/url] 用于取得URL地址中的变量[/td][td][size=2]852Bytes[/size][/td][/tr]
[tr][td]mshta[/td][td][url=http://www.bathome.net/lib/diy/mshta.js]diy[/url][/td][td][url=http://www.bathome.net/redirect.php?goto=findpost&ptid=34544&pid=163480]src[/url] 创建一个 mshta 对象,以获取窗口信息和改变窗口形态[/td][td][size=2]648Bytes[/size][/td][/tr]
[tr][td]RunCommand[/td][td][url=http://www.bathome.net/lib/diy/RunCommand.js]diy[/url][/td][td][url=http://www.bathome.net/redirect.php?goto=findpost&ptid=34544&pid=163486]src[/url] 将接收到的命令行参数当作 js 语句来运行[/td][td][size=2]2KB[/size][/td][/tr]
[tr][td]WSH[/td][td][url=http://www.bathome.net/lib/diy/WSH.js]diy[/url][/td][td][url=http://www.bathome.net/redirect.php?goto=findpost&ptid=34544&pid=163482]src[/url] 模拟一个 WSH/WScript 对象[/td][td][size=2]5KB[/size][/td][/tr]
[/table][/quote]

CrLf 发表于 2015-11-30 23:47

欢迎反馈Bug

依山居 发表于 2015-11-30 23:58

- -我是希望默认下到当前目录.

CrLf 发表于 2015-12-1 00:14

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=178788&ptid=38393]4#[/url] [i]依山居[/i] [/b]


    下载虾米?

依山居 发表于 2015-12-1 01:05

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=178789&ptid=38393]5#[/url] [i]CrLf[/i] [/b]


    Tools.get(\"gawk\") 下载到当前目录怎么改?

CrLf 发表于 2015-12-1 01:42

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=178790&ptid=38393]6#[/url] [i]依山居[/i] [/b]


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 [url]http://bathome.net/s/hta/?[/url][color=Red]help[/color]

引用时/index.html都可省略吧?

默认加载hide库可好?
比如mshta [url]http://bathome.net/s/hta[/url] '批处理之家',要是默认加载hide库就清爽些了

Libs库可列举库列表,但缺少列举某个库都有哪些方法的功能,要查看时还需按链接查看源码,
所以要是有个方法能列举某个库的所有方法和示例那就方便多了

回家路上 发表于 2015-12-1 13:28

[i=s] 本帖最后由 回家路上 于 2015-12-1 13:30 编辑 [/i]

希望脚本库能由此引来一度春天。

确实,要引入这个的话,感觉帮助文档使用说明就得很清楚了。----特别是转载库
虽然是开源的,但是毕竟很多人不会JS。能方便的查看说明文档最好。而且是狠多方法都有很详细的注释和用例,但是怎么方便查看?
想想工作量很大,恨我不通JS啊。

感谢奉献。

CrLf 发表于 2015-12-1 14:17

[i=s] 本帖最后由 CrLf 于 2015-12-1 20:58 编辑 [/i]

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=178795&ptid=38393]8#[/url] [i]pcl_test[/i] [/b]


[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=178795&ptid=38393]8#[/url] [i]pcl_test[/i] [/b]

   
    默认加载的 default 列表中已经包含 hide 库,只是 debug 和 help 开关会暂时忽略 hide 罢了,因为此时就是需要查看界面的
    有点困难,我有尝试过解析源码获取声明的方法和属性,目前可以做到解析源码中最外层的部分,但对更复杂机制产生的内容束手无策
    我想最好的办法是笨办法,在 bathomeLibs.json 中添加每个库的方法和属性简略信息,但考虑到现在已有 65 个库…即使自写库也有 19 个之多,实在没这个精力一一写出
    事实上,bathomeLibs 中还有太多我希望能实现但没精力一一实现的库,比如注册表读写、基于 WIA 的图片格式转换还有完善的 help 机制,希望有兴趣的人能够加入,前提是和自写库格式统一、代码无害/封装合理/兼容性好/相对独立
    目前要查看有哪些方法没有提供针对库的文档,但可以列举所有方法,或查看某一个函数的注释,目前的办法是:[code]list(this)
::查看当前所有可用的所有外围函数和变量

list($Host)
::查看 $Host 对象中当前所有可用的所有外围函数和变量

help(this)
::查看当前 this 所有外层函数和变量和 window 对象的所有方法和属性

help(this,true)
::在前一条例子的基础上额外显示对应的类型

help(help)
::查看 help 函数的入口参数

help(help,true,true)
::查看 help 函数的入口参数和干净的帮助信息,所有自写库均支持此用法[/code]执行 help(help,true,true) 将返回以下格式:[code]<Function> function (objArg,bShowType,bShowHelp){
        //列举指定对象的方法和属性,可用于 com 组件
        //依赖组件:TLI.TLIApplication

        /*
                objArg  要处理的对象
                [showType]  是否显示属性
                [showHelp]  是否显示帮助信息或具体内容
                { return Array }
                例:
                help([])
                返回数组的自定义方法和属性
                help([],true,true)
                返回数组的自定义方法和属性,并注明类型和详细帮助信息
        */

        //部分代码修改自 http://demon.tw/programming/tli-tliapplication.html
    }[/code]list 和 help 的用法不止于此,详见帮助

CrLf 发表于 2015-12-1 14:26

[url]http://bathome.net/s/hta/index.html[/url]
可简写为以下任意一者
[url]http://bathome.net/s/hta/index[/url]
[url]http://bathome.net/s/hta/[/url]
[url]http://bathome.net/s/hta[/url]

但最后一个写法将导致读取不了 ? 及后续开关
域名则可以是 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

[i=s] 本帖最后由 CrLf 于 2016-9-26 00:46 编辑 [/i]

[size=5][color=Red]考虑到 win10 下的兼容性,建议用完整地址调用脚本 mshta [url]http://bathome.net/s/hta/index.html[/url] "WSH.Echo('执行你的脚本')" | findstr .[/color][/size]

yu2n 发表于 2017-3-26 00:21

[i=s] 本帖最后由 yu2n 于 2017-3-26 00:30 编辑 [/i]

方便好用的功能,点赞!
`
举个例子:
如果要在你的互联网小程序(批处理)中加入“解压带密码的 zip 文件”功能,你可以这样做:
`
1. 创建临时目录,切换工作目录到临时目录
2. 下载 unzip.exe 到临时目录
3. 使用 unzip.exe 解压带密码的 zip 文件
`
这仅仅需要以下几行代码:[code]
@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"
[/code]`
[color=YellowGreen]更多的第三方命令行小程序在等着你~[/color]
`
[url=http://www.bathome.net/s/tool/index.html?key=unzip][color=Green]在线第三方命令行工具[/color][/url]  [url=http://www.bathome.net/s/tool/index.html]http://www.bathome.net/s/tool/index.html[/url]
`
`

老刘1号 发表于 2021-7-31 19:59

firebug原链接似乎失效了

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.