本帖最后由 luren666 于 2015-12-30 21:42 编辑
估计这样会快一些,不需要每次都遍历一次磁盘文件,这样会在找到一个文件后就会循环判断是否符合其中一个条件。其实可以不用每次都传二维数组到函数,定义一个全局二维数组,然后在函数内判断就可以,不过貌似传参数的话,可以实现每个磁盘查找不同的文件,多定义一个二维数组,然后不同的磁盘传不同的数组就可以了,所以我就保留了下来。
Global $result = FileOpen("D:\result.txt",2+8)
Local $Drive=["D:","E:"]
;;二维数组存放【文件,配匹模式】,匹配模式 1左,2右,3任意,4精确
Local $Pattern[6][2] = [[5,0],["a.exe",2],["auto",1],["cad",1],["Key",1],["ak",1]]
For $s = 0 To UBound($Drive) - 1
FindFile($Drive[$s],$Pattern)
Next
FileClose($result)
Func FindFile($sDir,ByRef $Pattern)
Local $hSearch = FileFindFirstFile($sDir & "\*.*")
If $hSearch = -1 Then Return
While 1
Local $sFile = FileFindNextFile($hSearch)
If @error Then
ExitLoop
ElseIf @extended Then
FindFile($sDir & "\" & $sFile,$Pattern)
Else
For $x = 1 To $Pattern[0][0]
Switch $Pattern[$x][1]
Case 1
If StringLeft($sFile,StringLen($Pattern[$x][0])) = $Pattern[$x][0] Then FileWriteLine($result,$sDir & "\" & $sFile)
Case 2
If StringRight($sFile,StringLen($Pattern[$x][0])) = $Pattern[$x][0] Then FileWriteLine($result,$sDir & "\" & $sFile)
Case 3
If StringInStr($sFile,$Pattern[$x][0]) Then FileWriteLine($result,$sDir & "\" & $sFile)
Case 4
If $sFile = $Pattern[$x][0] Then FileWriteLine($result,$sDir & "\" & $sFile)
EndSwitch
Next
EndIf
WEnd
; 关闭搜索句柄
FileClose($hSearch)
EndFunc
|