看代码吧!之前论坛高手的代码。搜索速度很快!!#Include <Array.au3>
Dim $dirlist,$dirarry
$dirlist=_FileListEx("c:\windows")
$dirarry=StringSplit($dirlist,"|")
_ArrayDisplay($dirarry)
Func _FileListEx($sDir)
If StringInStr(FileGetAttrib($sDir),"D")=0 Then Return SetError(1,0,"")
Local $oFSO = ObjCreate("Scripting.FileSystemObject")
Local $objDir
Local $Sources=$sDir
Local $aDir = StringSplit($sDir, "|", 2)
Local $iCnt = 0
Local $sFiles = "",$Attributes,$DateCreated,$DateLastAccessed,$DateLastModified,$ShortName,$ShortPath,$Size,$Type
Do
$objDir = $oFSO.GetFolder($aDir[$iCnt])
For $aItem In $objDir.SubFolders
;扩展应用改下这句, 如指定文件夹 If StringInStr($aItem.Name, "XXX") Then
$sDir &= "|" & $aItem.Path
;文件夹层数可以通过 StringReplace($aItem.Path, "", "", 0, 1)的@extended值来判断
Next
;如果仅找文件夹,不找文件,$sFiles的语句都不用,最后是 Return $sDir
For $aItem In $objDir.Files
;扩展应用改下面这句
$sFiles &= $aItem.Path & "|"
;$sFiles &= StringRight($aItem.Path,StringLen($aItem.Path)-StringLen($Sources)-1) & "|"
;例如要找文件名中包含"kb"(不分大小写),改为: if StringInStr($aItem.Name, "kb") Then $sFiles &= $aItem.Path & "|"
;其他应用请参照上例修改: $aItem.XXX
#cs
$Attributes &= $aItem.Attributes & "|" ;Attributes 设置或返回文件或文件夹的属性
$DateCreated &= $aItem.DateCreated & "|" ;DateCreated 返回指定的文件或文件夹的创建日期和时间。只读
$DateLastAccessed &= $aItem.DateLastAccessed & "|" ;DateLastAccessed 返回指定的文件或文件夹的上次访问日期(和时间)。只读
$DateLastModified &= $aItem.DateLastModified & "|" ;DateLastModified 返回指定的文件或文件夹的上次修改日期和时间。只读
$ShortName &= $aItem.ShortName & "|" ;ShortName 返回按照早期8.3文件命名约定转换的短文件名
$ShortPath &= $aItem.ShortPath& "|" ;ShortPath 返回按照早期8.3命名约定转换的短路径名
$Size &= $aItem.Size & "|" ;Size 对于文件返回指定文件的字节数;对于文件夹,返回文件夹所有的文件夹和子文件夹的字节数
$Type &= $aItem.Type & "|" ;Type 返回文件或文件夹的类型信息
#ce
Next
$iCnt += 1
If UBound($aDir) <= $iCnt Then $aDir = StringSplit($sDir, "|", 2)
Until UBound($aDir) <= $iCnt
If $sFiles Then $sFiles = StringTrimRight($sFiles, 1);去掉最右边"|"
Return $sFiles
EndFunc
|