No results found

有用的JScript代码整理

JScript并不是我们熟知的JavaScript,但是跟JavaScript很像,如果要在Windows环境中做一些自动化工作,比直接写BAT批处理脚本要简单些。

JScript是由微软公司开发的活动脚本语言,是微软对ECMAScript规范的实现。JScript最初是随Internet Explorer 3.0于1996年8月发布。在网络程序员谈论Internet Explorer中的JavaScript的时候,他们实际上是指JScript。和其他活动脚本一样,它后来也被Windows Script Host(WSH)和Active Server Pages所支持。典型的JScript源文件使用的扩展名是.js。JScript最新的版本是基于尚未定稿的ECMAScript4.0版规范的JScript .NET,并且可以在微软的.Net环境下编译。JScript在ECMA的规范上增加了许多特性。 ——百度百科

准备

测试环境:Windows 10 专业版

测试文件夹目录结构如下:

1
2
3
4
5
6
7
8
9
testfolder
|---test.bat
|---test.js
|---folder1
|---|---folder1.1
|---|---folder1.2
|---|---a.txt
|---|---b.txt
|---|---c.txt

test.bat是批处理文件,测试的时候直接点击这个文件运行,该文件内容如下:

1
2
3
4
5
6
7
8
@rem 
@rem
@rem 我是注释
@rem

cscript ./test.js

pause

test.js文件是具体放JScript代码的地方,将下列功能的代码放在这里。

** 特别注意:中文系统下,将所有文件的编码格式改为GB2312,否则有乱码导致程序存在中文时有异常。**

遍历文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*******************************************
*遍历所有子文件夹
*******************************************/
var folderPath = "./folder1";
var folers = GetFolderList(folderPath);
for (; !folers.atEnd(); folers.moveNext())
{
var folderName = folers.item();
WScript.Echo("文件夹名称:"+folderName.Name);
WScript.Echo("文件夹路径:"+folderName);
}

/*******************************************
*获取指定路径文件夹下的所有子文件夹
*@folderspec:文件夹路径
*return:子文件夹集合
*******************************************/
function GetFolderList(folderspec)
{
var fso, f, fc;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.GetFolder(folderspec);
fc = new Enumerator(f.SubFolders);
return(fc);
}

输出结果:

1
2
3
4
5
6
7
8
9
10
11
C:\Users\Administrator\Desktop\testfolder>cscript ./test.js
Microsoft (R) Windows Script Host Version 5.812
版权所有(C) Microsoft Corporation。保留所有权利。

文件夹名称:folder1.1
文件夹路径:C:\Users\Administrator\Desktop\testfolder\folder1\folder1.1
文件夹名称:folder1.2
文件夹路径:C:\Users\Administrator\Desktop\testfolder\folder1\folder1.2

C:\Users\Administrator\Desktop\testfolder>pause
请按任意键继续. . .

遍历所有文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*******************************************
*遍历所有文件
*******************************************/
var folderPath = "./folder1";
var files = GetFolderFileList(folderPath);
for (; !files.atEnd(); files.moveNext())
{
var fileName = files.item();
WScript.Echo("文件名称:"+fileName.Name);
WScript.Echo("文件路径:"+fileName);
}

/*******************************************
*获取指定文件夹路径下的所有文件
*@folderspec:文件夹路径
*return:文件夹下的文件集合
*******************************************/
function GetFolderFileList(folderspec)
{
var fso, folder, files;
fso = new ActiveXObject("Scripting.FileSystemObject");
folder = fso.GetFolder(folderspec);
files = new Enumerator(folder.files);
return files;
}

输出结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
C:\Users\Administrator\Desktop\testfolder>cscript ./test.js
Microsoft (R) Windows Script Host Version 5.812
版权所有(C) Microsoft Corporation。保留所有权利。

文件名称:a.txt
文件路径:C:\Users\Administrator\Desktop\testfolder\folder1\a.txt
文件名称:b.txt
文件路径:C:\Users\Administrator\Desktop\testfolder\folder1\b.txt
文件名称:c.txt
文件路径:C:\Users\Administrator\Desktop\testfolder\folder1\c.txt

C:\Users\Administrator\Desktop\testfolder>pause
请按任意键继续. . .

获取文件MD5值

有时候需要找出修改的文件,对比文件MD5值是有用的,耗时看文件大小,文件太大时间可能很长。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*******************************************
*遍历所有文件,获取文件MD5值
*******************************************/
var folderPath = "./folder1";
var files = GetFolderFileList(folderPath);
for (; !files.atEnd(); files.moveNext())
{
var fileName = files.item();
WScript.Echo(fileName.Name+"的MD5值:"+GetFileMD5(fileName));
}

/*******************************************
*获取指定文件夹路径下的所有文件
*@folderspec:文件夹路径
*return:文件夹下的文件集合
*******************************************/
function GetFolderFileList(folderspec)
{
var fso, folder, files;
fso = new ActiveXObject("Scripting.FileSystemObject");
folder = fso.GetFolder(folderspec);
files = new Enumerator(folder.files);
return files;
}

/*******************************************
*获取文件MD5值
*@filePath:脚本文件绝对路径
*******************************************/
function GetFileMD5(filePath)
{
var objShell = new ActiveXObject("WScript.Shell");
var iReturnMsg = objShell.Exec("cmd.exe /c certutil -hashfile \""+filePath+"\" MD5");
var result = iReturnMsg.StdOut.ReadAll();
var splitArr = result.split("\n");
var fileMD5 = splitArr[1].replace(/\s/g,"");
return fileMD5;
//WScript.Echo(fileMD5);
}

输出结果:

1
2
3
4
5
6
7
8
9
10
C:\Users\Administrator\Desktop\testfolder>cscript ./test.js
Microsoft (R) Windows Script Host Version 5.812
版权所有(C) Microsoft Corporation。保留所有权利。

a.txt的MD5值:22d42eb002cefa81e9ad604ea57bc01d
b.txt的MD5值:1efc98f0102b2109fb90307e6e1c484e
c.txt的MD5值:ba2ee8e2ba48e6667dca8c83dab38f4c

C:\Users\Administrator\Desktop\testfolder>pause
请按任意键继续. . .

创建Excel文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
CreateExcelFile("./texcel.xlsx",3);

/*******************************************
*创建Excel文件
*@filePathName:文件路径,相对路径或绝对路径
*@sheetCount:Excel中Sheet的个数
*******************************************/
function CreateExcelFile(filePathName,sheetCount)
{
try{
var ExcelApp = new ActiveXObject("Excel.Application");
var WshShell = WScript.CreateObject ("WScript.Shell");
var currentPath = WshShell.CurrentDirectory;
var i;

ExcelApp.Visible = false;
ExcelApp.DisplayAlerts = false;
var ExcelBook = ExcelApp.Workbooks.Add;

for (i=1;i<sheetCount;++i)
{
ExcelBook.Worksheets.Add;
}

if (filePathName.indexOf(".") == 0)
{
currentPath = currentPath + filePathName.slice(1);
}else{
currentPath = filePathName;
}

currentPath = currentPath.replace(/\//g,"\\");
//currentPath = currentPath.replace(/\\/g,"\\\\"); 路径在变量中不用转义

//保存表格
ExcelBook.SaveAs(currentPath);
}catch(e){
WScript.Echo("发生异常:"+e);
}finally{
//用 Application 对象用 Quit 方法关闭 Excel。
ExcelApp.Quit();
}
}
文章目录
  1. 1. 准备
  2. 2. 遍历文件夹
  3. 3. 遍历所有文件
  4. 4. 获取文件MD5值
  5. 5. 创建Excel文件
|