最近想做个简单的小工具用于自动改文件名,奈何windows原生shell太过鸡肋,只好用vbs,但是实在无法理解vb中很多语法规则,加之异常水土不服的代码风格,只好转而写jscript了,开始不愿用jscript也是因为微软api文档残缺。。。谁让jscript不是windows亲儿子,其大部分功能都是靠ActiveXObject实现的,相对的vbs就简单多了如提示框msgbox函数即可,如果只是为了弹这个框推荐vbs。

下面给出各个重要对象的创建方法,具体方法和属性在msdn上有相关文档。注意文档有点坑,文档写的是属性可能在jscript中是方法,或者相反,因为他是针对vbs写的文档。。。

下面列出的对象我也写了一些封装的对象,操作比直接用方便得多。

jscript文件系统对象:

WScript.CreateObject("Scripting.FileSystemObject");

读写文件操作目录必须的对象

Regexp对象的使用和javascript完全一样

只是windows对正则的高级特性支持不太理想如/(?<=windows)2000/反向预查不支持/(?<name>dance)/命名分组不支持,基本和ie9对正则的支持是一致的

jscript Excel对象

相关属性方法太多请自行查阅msdn

WScript.CreateObject("Application.Excel");

jscript WShell对象

WScript.CreateObject("WScript.Shell");

此对象的popup方法可实现弹出对话框等功能。windows jscript alert方法(为了方便大家检索)。

jscript InternetExplore对象

WScript.CreateObject("InternetExplorer.Application");

此对象可获得ie浏览器对象可编写自动访问某些站点的脚本,通过document属性操作页面和javascript完全一样

对此我自己实现了一个Jscript版的css选择器,支持不是很完善但比手动查找dom元素方便n倍

支持类名,id,tagname,属性选择器

对于元素继承关系支持后代选择和>选择器

Finder需要传入从internetExplorer对象获取的document

下面是代码

function Finder(docu){//将document与对象关联this.docu=docu;this.indexOf=function(arr,n){for(var i=0;i<arr.length;i++){if(arr[i]===n){return i;}}return -1;}this.concatArray=function(arr,a2){if(this.indexOf(arr,a2)!=-1){return;}for(var i=0;i<a2.length;i++){arr[arr.length]=a2[i];}}//可实现id,class,tagName,属性选择器过滤//过滤器顺序标签名,id,类名,属性this.filter=function(arr,data){var tmp=[];//用于属性选择器和class选择器跳出while内层循环a:for(var i=0;i<arr.length;i++){var n=arr[i];var hasFilter=false;if(data.name){hasFilter=true;if(n.tagName.toLowerCase()!=data.name.toLowerCase()){continue;}}if(data.id){hasFilter=true;if(n.id!=data.id.replace("#","")){continue;}}if(data.className){hasFilter=true;var nodeClass=n.className;var classes=(data.className+"").split(".");//确保className每个类名前后都有空字符for(var j=0;j<classes;j++){var clas=classes[i];clas=clas.trim();clas=" "+clas+" ";if(!nodeClass.match(clas)){continue a;}}}if(data.attr){hasFilter=true;/**属性名       1属性值        2*///用于获取属性名和值var attrReg=/^\[([^=\]]+)(?:=([^\]]+))?\]/;//用于去除字符串中的引号var trimReg=/(^\"|\"$)/g;var attrStr=data.attr;while(attrStr!=""){var m=attrStr.match(attrReg);attrStr=attrStr.replace(attrReg,"");m={name:m[1],value:m[2]};var name=m["name"];name=name.replace(trimReg,"");var value=m["value"];var realValue=n.getAttribute(name);if(value){value=value.replace(trimReg,"");if(realValue!=value){continue a;}}else{if(realValue==null){continue a;}}}}//由于所有过滤方式都是可选的所以必须检查是否使用了过滤方式如果没有则报错if(!hasFilter){throw "选择器语法错误";}tmp.push(n);}return tmp;}this.parseData=function(str){var a=str.match(this.selectorReg);if(a==null){throw "选择器语法错误";}return {childType:a[1],name:a[2],id:a[3],className:a[4],attr:a[5]}};//传入的context必须是document或者页面元素//此方法只负责实现子节点兄弟节点查找过滤由filter方法实现//查找只能从body开始向下,如传入body则无法查找到任何匹配this.find=function(selector,context){selector=selector.replace(/\s{2,}/g," ");if(selector.match(/^[^\w\d >#\.\[]/)){throw "选择器语法错误";}if(selector.match(/^[^\s>]/)){selector=" "+selector;}context=context?context:this.docu;if(context.nodeType!=1){var testId=/^\s*#([\w\d\-_]+)\s*$/;var m=selector.match(testId);if(m!=null){return [context.getElementById(m[1])];}else{context=context.body;}}var data=this.parseData(selector);var waitValid=[];if(data.childType==">"){waitValid=context.children;waitValid=this.filter(waitValid,data);}else if(data.id||data.attr){function getAllChildren(node,call,that,data){var selfChildren=node.children;for(var i=0;i<selfChildren.length;i++){var c=selfChildren[i];call(c,that,data);getAllChildren(c,call,that,data);}}getAllChildren(context,function(n,that,data){waitValid.push(n);},this,data);waitValid=this.filter(waitValid,data);}else{if(data.name){waitValid=context.getElementsByTagName(data.name);}else if(data.className){var cls=" "+cls;cls=data.className.split(".")[1];waitValid=context.getElementsByClassName(cls);}waitValid=this.filter(waitValid,data);}selector=selector.replace(this.selectorReg,"");if(selector!=""){//如果选择器没有执行完则以前面的查找结果继续向下查找//前面的查询结果直接丢弃var tmp=[];for(var i=0;i<waitValid.length;i++){var ite=waitValid[i];var t=this.find(selector,ite);this.concatArray(tmp,t);}return tmp;}return waitValid;}
}
//用于解析选择器不能使用命名分组功能
//子节点类型 1
//tagName       2
//id选择器     3
//类名选择器 4
//属性选择器 5
Finder.prototype.selectorReg=/^([ >])([\-_\w\d]+)?(#[\w\d\-_])?((?:\.[\-_\w\d]+)*)((?:\[[^\]]+\])*)/;

关于Windows系统脚本(jscript)相关推荐

  1. bat小工具_小程序反编译工具在windows系统下的调用脚本

    点击上方蓝字可以订阅哦 之前的文章中介绍了小程序的反编译工具,工具在 Linux 系统下使用时执行bingo.sh [xxx.wxapkg]就可以. 有小伙伴不知道在windows系统下如何使用,这里 ...

  2. 【错误记录】Windows 系统 bat 脚本报错 ( Java 生成 bat 脚本乱码处理 | 输出 GB2312 字符串 | Windows 中的换行时 \r\n )

    文章目录 一.报错信息 二.问题分析 二.解决方案 一.报错信息 使用 Java 语言生成了 Windows 系统中的 bat 批处理脚本 , 运行后出现中文乱码 ; 使用如下 Java 代码生成 b ...

  3. 【错误记录】Windows 系统 bat 脚本报错 ( 使用 pause 拦截窗口自动关闭 | 方便查看错误 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 使用 Java 语言生成了 Windows 系统中的 bat 批处理脚本 , 双击后命令行窗口一闪而过 , 命令没有达到执行效果 ; 命令行内容很简 ...

  4. 那些年,我写过的设置Windows系统变量的vbs脚本

    下面是我之前整理过的三段vbs代码,他们的主要都是用于快速设置Windows系统变量的.这些代码,在使用的过程中,都做了很多修改,已经记不清最初从哪里学来的了. 第一段: Set WshShell=C ...

  5. 在 Windows 系统下常用的 bat 脚本分享

    以网络配置举例说明,网络连接默认情况下都是 DHCP(自动获取 IP 和 DNS 地址) 模式,但很多情况下,需要我们设置为指定的静态 IP 和 DNS 地址.在 Windows 系统中通常我们都是在 ...

  6. Windows系统安全检查脚本

    @echo off echo                                        "Windows系统安全检查脚本" echo               ...

  7. Windows系统共享文件夹或打印机等设备的dos脚本自动化

    目录 目录 Windows系统共享文件夹或打印机等设备的dos脚本自动化 一.概述 步骤: 执行的结果: 二.脚本实作 2.1.激活Windows的Administrator账户: 2.2.设置Win ...

  8. 【bat批处理脚本命令】2分钟看懂,一键主机windows系统远程连接控制阿里云等windows系统的云服务器(保姆级图文+实现代码)

    目录 1.实现效果 2.实现代码 3.使用代码新建一个bat脚本文件 总结 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 本来阿里云服务器 ...

  9. Windows 系统如何定时运行 Python 程序或脚本

    需求 我们经常有需要在系统上定时运行某个 Python 脚本来执行任务,例如每天定时运行 Python 爬虫脚本来获取数据,那在 Windows 系统上该如何定时运行 Python 脚本或程序呢? 步 ...

  10. 在windows系统写脚本,如何去掉回车换行符

    在windows系统写脚本,如何去掉回车换行符 在windows系统中写bash脚本,然后再拿到linux系统中运行,通常会遇到这样的问题: 无缘无故多出 "\r",这是windo ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装Master PDF Editor 3.2.81
  2. RabbitMQ的五种工作方式详细
  3. python中文编码-python中文编码json中文输出问题
  4. 我要当皇帝等微信小游戏的wbs
  5. 【图像分割应用】医学图像分割小总结
  6. elementui 按钮 表单_前后端分离,文件上传下载(springBoot+vue+elementUI)
  7. 360的驱动(qutmdrv.sys)分页内存泄露
  8. android 不能接收组播数据,但能够发送组播数据
  9. Velocity.js中文文档
  10. 走进LWRP(Universal RP)的世界
  11. java与bartender_Java调取Bartender使用教程.md
  12. QOMO Linux 4.0 正式版发布
  13. MySQL抽稀_python安装mysql的依赖包mysql-python操作
  14. c语言写入文件后换行,关于文件操作,碰到空格就换行
  15. Android 进程间通信——Service、Messenger
  16. python--for循环
  17. mongodb 远程连接
  18. ubuntu 9.10学习笔记
  19. 谷歌浏览器连接超时_技术丨常见在线课堂网络连接网络视频播放的解决方案...
  20. Badboy提示脚本错误解决方法

热门文章

  1. python 微信群发_用python写一个微信群发工具(基于itchat库)
  2. 双非本科生进大厂,而我还在底层默默地爬树(上)
  3. JS表单验证Email地址
  4. 百度云盘上传文件 提示服务器错误,百度网盘上传文件失败怎么办?百度网盘无法上传文件的解决办法...
  5. A Linux Kernel Miracle Tour - 启程
  6. 反映百度引擎权重的身分都有哪些
  7. b5纸尺寸_画册设计一般多大 宣传册设计用多大尺寸比较合适
  8. Nginx配置Basic_Auth登录认证
  9. 星星之火-6:无线通信必须知道的“信号”与傅里叶信号变换
  10. 计算机dvd驱动错误,修正:一个错误发生在弹出的CD/DVD驱动器在Windows 10