[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[原创教程] 批处理之家在线 HTA 脚本

本帖最后由 CrLf 于 2017-3-6 10:52 编辑

_wscript.exe 支持 .bat 的 wscriptJSConsole v2.0.1 JScript控制台
再到 js/bat脚本混编新方案bat、vbs、js 原生混编批处理之家 js 在线脚本库
我一直在寻觅批处理的终极增强方案
但可惜的是鱼与熊掌不可兼得,要么操作繁琐,要么功能不够强大,有时候想“就这样了,反正只是批处理”。

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

举几个实例感受一下:
  1. mshta http://bathome.net/s/hta/index.html type('UTF8编码的文件.txt')|more
  2. ::调用 type 函数自动识别文件编码,可识别 ANSI、UTF8、UTF16(即通常说的Unicode)
  3. mshta http://bathome.net/s/hta/index.html Tools.get(\"gawk\")
  4. ::调用基于 Batch-CN 第三方仓库的 Tools 库实现自动判断并下载 gawk 命令(假如 %Path% 中找不到此命令的话)
  5. ::为了提供更佳的命令行兼容性,此页面会抛弃命令行参数中未转义的 ",此例中的 \" 即代表要保留的 "
  6. ::此处的 \"gawk\" 也可写为 ""gawk"" 或 'gawk'
  7. mshta "http://bathome.net/s/hta/index.html?group=math" (new XDate()).toString(\"yyyy年MM月dd日\")
  8. ::加载 math 列表中的库,并使用 XDate 库的 toString 方法格式化输出当前日期
  9. echo msgbox "批处理之家" | mshta "http://bathome.net/s/hta/index.html?group=vbs&echo=false" VBScript(WSH.StdIn.ReadAll())
  10. ::加载 vbs 列表中的库,执行来自管道的 VBS 命令,并且不显示返回值
复制代码
当然,你也可以不调用任何函数,只执行默认库列表所能完成的命令:
  1. for /f %%a in ('mshta http://bathome.net/s/hta/index.html 12.5*3') do echo 12.5*3=%%a
复制代码
查看帮助可用 help 参数:
  1. mshta http://bathome.net/s/hta/index.html?help
复制代码
启用调试模式可用 debug 参数,在窗口中按 F12 可呼出 FireBug 控制台:
  1. mshta http://bathome.net/s/hta/index.html?debug
复制代码
如有出现运行异常的情况,可能是缓存所致,可尝试以下几种方法:
  1. 1、在 URL 后添加随机数暂时避开缓存
  2.    例如: mshta http://bathome.net/s/hta/index.html?%random%
  3.    此方法仅刷新 html 页面的缓存
  4. 2、在 IE 中按 Alt 键,工具>删除浏览历史记录,勾选“临时 Internet 文件和网站文件”,点击删除
  5.    此方法可刷新所有缓存,推荐使用,但会同时清除 IE 浏览器下其他网站的缓存
  6. 3、有经验的坛友,可以在 IE 缓存文件夹中有选择地删除缓存文件
  7.    在 IE 中按 Alt 键,工具>Internet 选项>常规>设置>Internet 临时文件>查看文件
  8.    也可以通过 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 .
5

评分人数

本帖最后由 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



必选库

名称版本说明大小
GetRequestdiysrc 用于取得URL地址中的变量852Bytes
mshtadiysrc 创建一个 mshta 对象,以获取窗口信息和改变窗口形态648Bytes
RunCommanddiysrc 将接收到的命令行参数当作 js 语句来运行2KB
WSHdiysrc 模拟一个 WSH/WScript 对象5KB

TOP

欢迎反馈Bug

TOP

回复 4# 依山居


    下载虾米?

TOP

回复 6# 依山居


get 会自动判断是否需要下载,改用 down 就好了
Tools.down(\"gawk\")

Tools.down('gawk')
Tools.down(""gawk"")
不过最新的 Tools.js 为了适应新的架构,作了很多兼容性的改进,其中有一处修改导致目前暂时无法下载文件,修复后的文件已提交给 Batcher,等站长更新后就可以正常使用 Tools.js 了

TOP

本帖最后由 CrLf 于 2015-12-1 20:58 编辑

回复 8# pcl_test


回复 8# pcl_test

   
    默认加载的 default 列表中已经包含 hide 库,只是 debug 和 help 开关会暂时忽略 hide 罢了,因为此时就是需要查看界面的
    有点困难,我有尝试过解析源码获取声明的方法和属性,目前可以做到解析源码中最外层的部分,但对更复杂机制产生的内容束手无策
    我想最好的办法是笨办法,在 bathomeLibs.json 中添加每个库的方法和属性简略信息,但考虑到现在已有 65 个库…即使自写库也有 19 个之多,实在没这个精力一一写出
    事实上,bathomeLibs 中还有太多我希望能实现但没精力一一实现的库,比如注册表读写、基于 WIA 的图片格式转换还有完善的 help 机制,希望有兴趣的人能够加入,前提是和自写库格式统一、代码无害/封装合理/兼容性好/相对独立
    目前要查看有哪些方法没有提供针对库的文档,但可以列举所有方法,或查看某一个函数的注释,目前的办法是:
  1. list(this)
  2. ::查看当前所有可用的所有外围函数和变量
  3. list($Host)
  4. ::查看 $Host 对象中当前所有可用的所有外围函数和变量
  5. help(this)
  6. ::查看当前 this 所有外层函数和变量和 window 对象的所有方法和属性
  7. help(this,true)
  8. ::在前一条例子的基础上额外显示对应的类型
  9. help(help)
  10. ::查看 help 函数的入口参数
  11. help(help,true,true)
  12. ::查看 help 函数的入口参数和干净的帮助信息,所有自写库均支持此用法
复制代码
执行 help(help,true,true) 将返回以下格式:
  1. <Function> function (objArg,bShowType,bShowHelp){
  2.         //列举指定对象的方法和属性,可用于 com 组件
  3.         //依赖组件:TLI.TLIApplication
  4.         /*
  5.                 objArg  要处理的对象
  6.                 [showType]  是否显示属性
  7.                 [showHelp]  是否显示帮助信息或具体内容
  8.                 { return Array }
  9.                 例:
  10.                 help([])
  11.                 返回数组的自定义方法和属性
  12.                 help([],true,true)
  13.                 返回数组的自定义方法和属性,并注明类型和详细帮助信息
  14.         */
  15.         //部分代码修改自 http://demon.tw/programming/tli-tliapplication.html
  16.     }
复制代码
list 和 help 的用法不止于此,详见帮助

TOP

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 使用不同的缓存

TOP

Bug 已修复,刷新缓存即可见效,方法见顶楼末尾部分

TOP

help 函数配合 TLI 控件还可查看 COM 组件的方法和属性
不过你得在 32 位的 mshta 下才能调用 32 位的 TLI
对于 64 位组件的方法和属性,各位有什么更好的查阅方法吗?最好能通过原生组件来实现

TOP

本帖最后由 CrLf 于 2016-9-26 00:46 编辑

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

TOP

返回列表