1 起源
微软在系统内植入一个基于 32 位 Windows 平台、独立的脚本运行环境,并且命名为 "WHS"
Windows Scripting Host/ Windows 脚本宿主
2 工作原理
使用IE 中的 VBScript 和 JScript 解释引擎。因此, WHS有两种语法: vbs 和 js
分别保存为 vbs 文件和 js 文件。
3 WHS的使用第一步
在编辑器中写上下述代码,并且保存为 js或者vbs结尾的文件。
WScript.Echo("Hi!You")
在命令行中执行: cscript 123.js
4 WHS的应用
-------------------------------------------------------------------------------------------------
(1) 列出一个特定目录下的所有文件
-------------------------------------------------------------------------------------------------
//创建文件系统对象
fso = new ActiveXObject("Scripting.FileSystemObject");
//指向指定的文件夹
dir="c:\\Windows\\temp";
fsofolder = fso.GetFolder(dir);
//搜集文件夹中包含的文件
colFiles = fsofolder.Files;
fc = new Enumerator( colFiles );
//显示并继续读取其它文件的文件名直到完成
WScript.Echo("Files under \""+dir+"\":");
for (; !fc.atEnd(); fc.moveNext() ){
WScript.Echo(fc.item());
}
脚本执行后会将指定目录中(C:\windows\temp)的所有文件一一列出来。
-------------------------------------------------------------------------------------------------
(2) 列出磁盘驱动器及其相关性质
-------------------------------------------------------------------------------------------------
fso = new ActiveXObject("Scripting.FileSystemObject");
driveTypeNames=["未知类型", "可移动磁盘", "硬盘", "网络磁盘驱动器", "光盘", "虚拟磁盘"];
e = new Enumerator(fso.Drives);
s = "";
for (; !e.atEnd(); e.moveNext()) {
x = e.item();
WScript.Echo(x.DriveLetter+":")
WScript.Echo(" 磁盘类型:" + x.DriveType + " (" + driveTypeNames[x.DriveType] + ")");
WScript.Echo(" 共享名称:" + x.ShareName);
WScript.Echo(" 磁盘是否就绪:" + x.IsReady);
if (x.IsReady){
WScript.Echo(" 卷标:" + x.VolumeName);
WScript.Echo(" 空间大小:" + x.AvailableSpace + "字节");
}
}
执行了这个脚本以后会显示出该磁盘驱动器的类型、卷标、空间大小、共享名称等相关信息。
-------------------------------------------------------------------------------------------------
(3) 列出与 SYSTEM 相关的重要环境变量
-------------------------------------------------------------------------------------------------
shell = WScript.CreateObject("WScript.Shell");
envObj = shell.Environment("SYSTEM");
WScript.Echo("====== 所有的 SYSTEM 环境变量列表:");
WScript.Echo("No. of env. variables = "+envObj.length);
var Enum=new Enumerator(envObj)
for (Enum.moveFirst(); !Enum.atEnd(); Enum.moveNext())
// WScript.Echo(Enum.item()+" ===> "+envObj(Enum.item()));
WScript.Echo(Enum.item());
有没有看过“系统” 属性?
对于属性中的系统环境的相关配置还需要用手动来查看吗?
这个脚本就可以解决掉这一系列的问题。
-------------------------------------------------------------------------------------------------
(4) 查看文件的详细属性
-------------------------------------------------------------------------------------------------
var file = "results.html";
// 创建文件系统并获取文件
var fso = new ActiveXObject( "Scripting.FileSystemObject" );
var f = fso.GetFile( file );
// Access properties and format results.
var fileinfo = "Results for " + file + "\n";
fileinfo += "名称:" + f.Name + "\n";
fileinfo += "属性:" + f.Attributes + "\n";
fileinfo += "大小:" + f.Size + " Bytes\n";
fileinfo += "创建日期:" + f.DateCreated + "\n";
fileinfo += "最后访问日期:" + f.DateLastAccessed + "\n";
fileinfo += "最后修改时期:" + f.DateLastModified + "\n";
fileinfo += "驱动器:" + f.Drive + "\n";
fileinfo += "类型:" + f.Type + "\n";
// 显示结果
WScript.Echo( fileinfo );
-------------------------------------------------------------------------------------------------
(5) 自定义设定压缩文件
-------------------------------------------------------------------------------------------------
WinRAR是比较流行的一个压缩程序。
在安装完成WinRAR后,首先需要为WinRAR的运行添加一个相对路径,
这有点类似于DOS中的config.sys文件中对可执行文件加入的路径。
在系统的环境变量里加入“set path=c:\Windows;c:\program files\WinRAR”
后就可以直接调用WinRAR了。
对于WinRAR的命令行具体的用法,
可以在DOS窗口或命令行窗口中输入“RAR.exe /?”就可以得到帮助。
将WinRAR准备完成后就可以用下面的脚来来完现自定义压缩了。
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run ("c:\\rar.exe c:\\test.rar c:\\a.txt c:\\b.txt")
<script language="VBScript.Encode" runat=server>
Set WshShell = server.CreateObject("Wscript.Shell")
IsSuccess = WshShell.Run (" c:\\rar.exe c:\\test.rar c:\\a.txt c:\\b.txt" ,1, true)
if IsSuccess = 0 Then
Response.write " 命令成功执行!"
else
Response.write " 命令执行失败!权限不够或者该程序无法在DOS状态下运行"
end if
</script>
-------------------------------------------------------------------------------------------------
(6) 清除本用户的临时文件
-------------------------------------------------------------------------------------------------
envObj = WshShell.Environment("USER");
tmp=WshShell.ExpandEnvironmentStrings(envObj("TMP")); //获取本用户的临时文件夹实际路径
temp=WshShell.ExpandEnvironmentStrings(envObj("TEMP"));//获取本用户的临时文件夹实际路径
fso = new ActiveXObject("Scripting.FileSystemObject");
//fso.DeleteFolder(tmp,true ); //开始删除(如果临时文件夹系统在用,会删除失败!)
//fso.DeleteFolder(temp,true );
-------------------------------------------------------------------------------------------------
(7) 设定系统变量(vbs版本)
-------------------------------------------------------------------------------------------------
Set WshShell=CreateObject("WScript.Shell")
Set WshEnv=WshShell.Environment("System")
如果想设置一个系统环境变量HOME,可以用WshEnv.Item("HOME")=value来实现。
删除一个环境变量:例如WshEnv.Remove("TMP")就会删除系统变量TMP。
[01] 文件操作
[01][01]判断文件是否存在
var file = "test.cs";
var fso = new ActiveXObject( "Scripting.FileSystemObject" );
if (fso.FileExists(file)){
WScript.Echo("is exist");
}else{
WScript.Echo("is not exist");
}
[01][02]判断文件夹是否存在
var file = "test.cs";
var fso = new ActiveXObject( "Scripting.FileSystemObject" );
if (fso. FolderExists (file)){
WScript.Echo("is exist");
}else{
WScript.Echo("is not exist");
}
[02]wscript.shell run参数
[02][01]
指定命令窗口的样式
0 隐藏该命令窗口并激活另外一个[随便]
1 激活和显示窗口
2 激活并显示为最小化的窗口
3 激活并显示为最大化的窗口
4 显示为此类窗口最近的尺寸和位置,之前的当前窗口还是保持为当前窗口
5 激活和显示此类窗口为最近的尺寸和位置
6 最小化特定窗口并激活下一个顶层窗口
7 显示为最小化窗口
8 以当前状态显示
9 激活并显示窗口,如果是最小或最大化状态,系统会将它变成普通样式
10 以激发该命令的窗口状态来设置显示命令窗口的状态
[03]Wscrīpt.Arguments
获得命令行参数
[99]资料
http://msdn.microsoft.com/en-us/library/at5ydy31(VS.85).aspx