小而巧 editplus 脚本编程
原文发布地址: https://www.jianshu.com/p/2a27a788e3ea
坚果 Jimbowhy 前后端脚本编程轻松篇集合文章:
- 轻松搭建PHP开发环境Win32
- 小而巧 editplus 脚本编程
- Windows Script Technology
- 看我怎样把editplus用巧
- HTTP协议入门与Fiddler抓包
前提要求
1. 安装editplus编辑器
2. Windows 系统
3. 可选工具 PrimalScript, 功能强大专业的IDE
配置editplus
打开editplus用户工具配置, Tools => Configure User Tools, 点击 Add Tool 添加一个程序工具并设置:
Menu text: CScript
Command: CScript.exe
Argument: $(FilePath) $(CurLineText)
Action: Capture output
!(editplus config)[config.png]
!(user tools)[tools.png]
配置完后以使用快捷键Ctrl+对应数字执行脚本. 现在新建一个js脚本, 以coding.js保存, 内容如下:
// "for( var p in WScript.Arguments) this unworking"
WScript.Echo( "count of arguments "+WScript.Arguments.length );
for( var i=0; i
现在把光标放到代码的第一行, 即注解所在行, 通过快捷键执行脚本, 注意 editplus 界面变化, 如果有以下日志内容出现就表示配置正确. 否则要检查系统环境配置, 保证CScript.exe可以被自动定位.
---------- CScript ----------
Microsoft (R) Windows Script Host Version 5.8
版权所有(C) Microsoft Corporation 1996-2001。保留所有权利。
count of arguments 1
for( var p in WScript.Arguments) this unworking
Output completed (0 sec consumed) - Normal Termination
现在解说以下脚本执行流程, 按下执行快捷键后, editplus调用配置好的用户工具程序, 即是 CScript.exe, 系统自动定位到程序目录. editplus 将脚本路径参数 (CurLineText) 这是当前行内容, 也就是前面特意指定的注解内容. 脚本执行时, WScript.Arguments对象来获取传入脚本的参数, 也就注解行的内容, 然后通过 WScript.Echo 方法打印出来, 因为使用的是 CScript.exe 控制台运行环境, 所以Echo不会弹出对话框, editplus 捕捉到控制台内容后返回到主界面显示出来.
基础知识
Windows平台提供了两种功能强大的脚本JScript和VBScript, JScript和网站开发的JavaScript是同源的, 基本结构相同只是运行环境不同. JScript和VBScript比较, 可以做一样的事, 只是JScript比VBScript更优雅, 语言结构更严谨.
整个脚本系统包括以下几部分:
脚本宿主 WSH(Windows Scripting Host)
提供脚本的运行环境, Windows 脚本宿主对象模型由 14 个对象组成, 根对象是 Wscript 对象。脚本运行时 Scripting Runtime
包含一系列对象化编程基础类, 如 Dictionary 对象相当于 PERL 的关联数组。项可以是任意形式的数据,存储在数组中。又如 FileSystemObject (FSO) 可以用一系列属性、方法和事件来处理文件夹和文件。Windows 脚本部件
提供了使用脚本语言,如 VBScript 和 JScript® 创建 COM 组件的简单方法。主要是 WScript.exe和CScript.exe, 两者差别在前者是GUI运行环境, 后者是控制台环境.
可选的运行参数, 大多数情况下,列在下表中的选项适用于 WScript.exe 和 CScript.exe, 例外情况会加以注释。
//B 批处理模式;隐藏用户提示和脚本错误在命令行中的显示。默认模式是交互模式。
//D 打开调试程序。
//E:engine 用指定的脚本引擎执行脚本。
//H:CScript 或 //H:Wscript 强制将 CScript.exe 或 WScript.exe 注册为运行脚本的默认应用程序。
//I 默认。交互模式;允许显示用户提示和脚本错误。与批处理模式相反。
//Job: 从 .wsf 文件运行指定的 JobID。
//logo 默认。显示标题。与 nologo 相反。
//nologo 防止在运行时显示执行标题。默认设置是 logo。
//S 保存该用户的当前命令行选项。
//T:nn 脚本可以运行的最大秒数, 默认设置是无限制, 如果超时, CScript 用 IActiveScript::InterruptThread 方法中断脚本引擎。
//U 用于 Windows NT 和 Windows 2000,强制命令行以 Unicode 格式输出。CScript 无法决定以 Unicode 还是以 ANSI 输出;默认设置为 ANSI。
//X 在调试程序中启动该程序。
//? 显示命令参数(用法信息)的简要说明和用法信息。
脚本宿主对象模型介绍
WScript 对象模型结构:
WScript
+--WshArguments
| +--WshNamed
| +--WshUnnamed
+--WshController
| +--WshRemote
| +--WshRemoteError
+--WshNetwork
+--WshShell
+--WshShortcut
+--WshUrlShortCut
+--WshEnvironment
+--WshSpecialFolders
+--WshScriptExec
Wscript
设置和检索命令行参数
确定脚本文件的名称
确定宿主文件的名称(wscript.exe 或 cscript.exe)
确定宿主的版本信息
创建 COM 对象,与 COM 对象连接以及断开连接
接收事件
通过编程方式停止执行脚本
将信息输出到默认输出设备(例如,对话框或命令行)
WshArguments
访问整个命令行参数集
WshNamed 访问命令行的已命名参数集
WshUnnamed 访问命令行的未命名参数集。
WshNetwork 与网络共享点和网络打印机连接以及断开连接
映射网络共享点以及取消其映射
访问有关当前登录用户的信息
WshController
使用 Controller 方法 CreateScript() 创建远程脚本过程
WshRemote 远程管理计算机网络上的计算机系统
通过编程方式操纵其他程序/脚本
WshRemote Error
因脚本出错而导致远程脚本终止时,访问可用的错误信息
WshShell 在本地运行程序
操纵注册表内容。
创建快捷方式
访问系统文件夹
操纵环境变量(如 WINDIR、PATH 或 PROMPT)
WshShortcut
通过编程方式创建快捷方式
WshSpecialfolders
访问所有的 Windows 特殊文件夹
WshURLShortcut
通过编程方式创建 Internet 资源的快捷方式
WshEnvironment
访问所有环境变量(如 WINDIR、PATH 或 PROMPT)
WshScriptExec
确定有关用 Exec() 运行的脚本的状态和错误信息访问 StdIn、StdOut 和 StdErr 通道
脚本文件类型
Windows 脚本是一个文本文件, 只要您用与 WSH 兼容的脚本扩展名(.js、.vbs 或 .wsf)保存脚本,就可用任何文本编辑器创建脚本, 双击运行脚本, 还可以将文件拖放到脚本以文件名作为参数传入, 参考 WScript.Arguments 对象. 用editplus就是很好的选择, 如果想要更更多的功能, 后面连接提供的 Microsoft Visual Studio 97 就包含了官方的专用工具 Visual InterDev。Windows 2000 或 Windows Me 系统中安装的是 2.0 版的 WSH. Windows 95、98 或 Windows NT 4.0 安装的则是 1.0 版,更新的系统是 WSH 5.6或以上, 当前 Windows XP 系统运行的是 5.8, 可以通过 WScript.echo(WScript.version) 来获取版本号.
.bat MS-DOS 操作系统的批处理文件
.asp ASP 网页 Active Server Page 文件
.html HTML WEB页面文件
.js Script 脚本
.vbs VBScript 脚本
.wsf Windows 脚本宿主文件, 由 WSH 2.0 或更高版本支持。
.wsh Windows 脚本宿主文件, 由 WSH 1.0 或更高版本支持。
实用的脚本程序
这个程序用来进行网页抓取, 也可以在进行扩展实现文件上传和下载. 先来基本的网页抓取脚本:
/*
* HTTP Programming for JScript on Windows Script Host
* HTTP protocol reference document Request For Comments(RFC), rfc2616
* https://tools.ietf.org/html/rfc2616#page-39
*/
!function(){
var shell = new ActiveXObject("WScript.Shell");
this.alert = function(msg) {
shell.Popup(msg, 0, "Alert", 64);
};
this.confirm = function(msg) {
return shell.Popup(msg, 0, "Popup", 33) == 1;
};
this.log = function(msg){
return WScript.Echo(msg);
}
}(); // execute and init dialoge function
function httpDemo(url){
var http = new ActiveXObject("MSXML2.XMLHTTP");
http.OnReadyStateChange = function(){
var readyStates = {
0:"uninitilized before open",
1:"initilizing before send",
2:"data sending",
3:"data translation",
4:"completed"
};
if(http.readyState==4 && http.status!=200){
log("Server return and it seems something wrong:"+http.statusText);
}
log("XMLHTTP State: "+readyStates[http.readyState]);
};
http.Open("POST", url, false ); //open(method, url, async, username, password)
http.Send("some=thing");
log("Response status: " + http.statusText + "\n"
//+ "Server:"+http.getResponseHeader("SERVER") + "\n"
//+ "Cookie:"+http.getResponseHeader("COOKIE") + "\n"
+ "All headers:===================\n"
+ http.getAllResponseHeaders()
+ "===============================\n"
+ http.responseText
.replace(/\n/g,"")
.replace(//g,"")
.replace(//g,"")
.replace(/<.+?>/g,"").replace(/[\s\n]+/g,"\n")
);
}
httpDemo("http://www.baidu.com"); // execute http request
注意代码最后几行的replace方法使用了RegExp正则表达式, 这是处理文字的利器, 这四行代码会过滤掉大部分无用的HTML标记, 只获取有用的页面文字内容. 保存代码, 运行后结果类似:
---------- CScript ----------
Microsoft (R) Windows Script Host Version 5.8
版权所有(C) Microsoft Corporation 1996-2001。保留所有权利。
XMLHTTP State: initilizing before send
XMLHTTP State: initilizing before send
XMLHTTP State: data sending
XMLHTTP State: data translation
XMLHTTP State: completed
Response status: OK
All headers:===================
ETag: "3dcd-560eb5cea6700"
Vary: Accept-Encoding,User-Agent
Content-Length: 15821
Content-Type: text/html
Expires: Fri, 27 Apr 2018 14:24:46 GMT
Last-Modified: Fri, 22 Dec 2017 10:34:36 GMT
===============================
页面不存在_百度搜索
网页新闻贴吧知道音乐图片视频地图文库更多?
很抱歉,您要访问的页面不存在!
温馨提示:
请检查您访问的网址是否正确
如果您不能确认访问的网址,请浏览百度更多页面查看更多网址。
回到顶部重新发起搜索
如有任何意见或建议,请及时反馈给我们。
帮助
举报
给百度提建议
Output completed (0 sec consumed) - Normal Termination
关于文件上传和下载的拓展涉及HTTP协议, 这是一个很值得学习的话题, 我会抽时间写点相关内容的.
参考文档
强烈推荐Microsoft Windows脚本技术, 英文版 script56.chm 内容更新更齐全, 特别是关于正则表达式的内容, 这部分内容很丰富, 值得另取一文讲解. 还有Advanced Windows Script Host Developers Guide 这本书深入讲解了Windows脚本编程技术, 脚本与应用程序的交互, 配合 Visual Basic 开发的 ActiveX 组件来扩展脚本功能. 书中举例 JScript 实现 VBScript 的 InputBox 功能, 通过 Internet Explorer 组件加载页面来模拟, 又可以通过开发 ActiveX 来实现, 使用 wsf 集合 VBScript 和 JScript 来实现, 甚至更直接地使用 WScript.Shell 的 Environment 属性实现通过环境变量来传递数据.
还有一本资料《Advanced Development with Microsoft Windows Script Host 2.0》, 看标题应该是深层次的数, 可惜找不到资源. 此外,SAPIEN 即 PrimalScript 发行公司初版的以本书是《WSH and VBScript Core 》。
微软官方早期的 MSDN 也可以作为参考, 在 Microsoft Visual 97 下载链接中可以找到.
PrimalScript 2014_7.0.32 x86
epp500_0651_smart.exe
《Microsoft Windows Script Host 2.0 Developer's Guide》 scripthost20dev.chm
《Advanced Windows Script Host Developers Guide (2003)》
Microsoft Windows脚本技术
Microsoft Windows Script Technologies script56.chm
Microsoft Visual 97 我喜欢的
Microsoft Visual 97 加密分享: 9km8