<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> 
<% 
dim st 
st=timer() 
'************************************************************* 
'*************搜索硬盘文件的类SearchFile ************* 
'*************调用方法: ************* 
'*************Set newsearch=new SearchFile '声明 ************* 
'*************newsearch.Folder="F:+E:"'传入搜索源************* 
'*************newsearch.keyword="汇编" '关键词************* 
'*************newsearch.Search '开始搜索************* 
'*************Set newsearch=Nothing '结束************* 
'*************Copyright(c)醉雨梧桐小站 ************* 
'*************http://btyz.51web.cn/ ************* 
'************************************************************* 
Class SearchFile 
dim Folders '传入绝对路径,多路径使用+号连接,不能有空格 
dim keyword '传入关键词 
dim objFso '定义全局变量 
dim Counter '定义全局变量,搜索结果的数目 
'*****************初始化************************************** 
Private Sub Class_Initialize 
Set objFso=Server.CreateObject("Scripting.FileSystemObject") 
Counter=0 '初始化计数器 
End Sub 
'************************************************************ 
Private Sub Class_Terminate 
Set objFso=Nothing 
End Sub 
'**************公有成员,调用的方法*************************** 
Function Search 
Folders=split(Folders,"+") '转化为数组 
keyword=trim(keyword) '去掉前后空格 
if keyword="" then 
Response.Write("<font color='red'>关键字不能为空</font><br/>") 
exit Function 
end if 
'判断是否包含非法字符 
flag=instr(keyword,"\") or instr(keyword,"/") 
flag=flag or instr(keyword,":") 
flag=flag or instr(keyword,"|") 
flag=flag or instr(keyword,"&") 
if flag then '关键字中不能包含\/:|& 
Response.Write("<font color='red'>关键字不能包含/\:|&</font><br/>") 
Exit Function '如果包含有这个则退出 
end if 
'多路径搜索 
dim i 
for i=0 to ubound(Folders) 
Call GetAllFile(Folders(i)) '调用循环递归函数 
next 
Response.Write("共搜索到<font color='red'>"&Counter&"</font>个结果") 
End Function 
'***************历遍文件和文件夹****************************** 
Private Function GetAllFile(Folder) 
dim objFd,objFs,objFf 
Set objFd=objFso.GetFolder(Folder) 
Set objFs=objFd.SubFolders 
Set objFf=objFd.Files 
'历遍子文件夹 
dim strFdName '声明子文件夹名 
'*********历遍子文件夹****** 
on error resume next 
For Each OneDir In objFs 
strFdName=OneDir.Name 
'系统文件夹不在历遍之列 
If strFdName<>"Config.Msi" EQV strFdName<>"RECYCLED" EQV strFdName<>"RECYCLER" EQV strFdName<>"System Volume Information" Then 
SFN=Folder&"\"&strFdName '绝对路径 
Call GetAllFile(SFN) '调用递归 
End If 
Next 
dim strFlName 
'**********历遍文件******** 
For Each OneFile In objFf 
strFlName=OneFile.Name 
'desktop.ini和folder.htt不在列取范围 
If strFlName<>"desktop.ini" EQV strFlName<>"folder.htt" Then 
FN=Folder&"\"&strFlName 
Counter=Counter+ColorOn(FN) 
End If 
Next 
'*************************** 
'关闭各对象实例 
Set objFd=Nothing 
Set objFs=Nothing 
Set objFf=Nothing 
End Function 
'*********************生成匹配模式*********************************** 
Private Function CreatePattern(keyword) 
CreatePattern=keyword 
CreatePattern=Replace(CreatePattern,".","\.") 
CreatePattern=Replace(CreatePattern,"+","\+") 
CreatePattern=Replace(CreatePattern,"(","\(") 
CreatePattern=Replace(CreatePattern,")","\)") 
CreatePattern=Replace(CreatePattern,"[","\[") 
CreatePattern=Replace(CreatePattern,"]","\]") 
CreatePattern=Replace(CreatePattern,"{","\{") 
CreatePattern=Replace(CreatePattern,"}","\}") 
CreatePattern=Replace(CreatePattern,"*","[^\\\/]*") '*号匹配 
CreatePattern=Replace(CreatePattern,"?","[^\\\/]{1}") '?号匹配 
CreatePattern="("&CreatePattern&")+" '整体匹配 
End Function 
'**************************搜索并使关键字上色************************* 
Private Function ColorOn(FileName) 
dim objReg 
Set objReg=new RegExp 
objReg.Pattern=CreatePattern(keyword) 
objReg.IgnoreCase=True 
objReg.Global=True 
retVal=objReg.Test(FileName) '进行搜索测试,如果通过则上色并输出 
if retVal then 
OutPut=objReg.Replace(FileName,"<font color='#FF0000'>$1</font>") '设置关键字的显示颜色 
'***************************该部分可以根据需要修改输出************************************ 
OutPut="<a href='#'>"&OutPut&"</a><br/>" 
Response.Write(OutPut) '输出匹配的结果 
'*************************************可修改部分结束************************************** 
ColorOn=1 '加入计数器的数目 
else 
ColorOn=0 
end if 
Set objReg=Nothing 
End Function 
End Class 
'************************结束类SearchFile********************** 
%> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
<title>Media搜索</title> 
</head> 
<body> 
<form name="form1" method="post" action="<% =Request.ServerVariables("PATH_INFO")%>"> 
关键词: 
<input name="keyword" type="text" id="keyword"> 
<input type="submit" name="Submit" value="搜索"> 
<a href="help.htm" target="_blank">高级搜索帮助</a> 
</form> 
<% 
dim keyword 
keyword=Request.Form("keyword") 
if keyword<>"" then 
Set newsearch=new SearchFile 
newsearch.Folders="E:\Media+F:" 
newsearch.keyword=keyword 
newsearch.Search 
Set newsearch=Nothing 
response.Write("<br/>费时:"&(timer()-st)*1000&"毫秒") 
end if 
%> 
</body> 
</html> 
