借用水木兄的GUI。并祝早日康复!#include <array.au3>
#include <File.au3>
#include <GuiListBox.au3>
#include <WindowsConstants.au3>
Local $str,$pathArray,$Path
GUICreate("文件搜索", 380, 350)
$List1 = GUICtrlCreateList("", 5, 5, 370, 300)
$Input1 = GUICtrlCreateInput("", 5, 310, 300, 21)
$But1 = GUICtrlCreateButton("浏览", 305, 308, 70, 25, $WS_GROUP)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case - 3
Exit
Case $But1
$Dir = FileSelectFolder("选择一个文件夹.", "")
If @error <> 1 Then
GUICtrlSetData($Input1, $Dir)
;If StringRight($var, 1) = '\' Then $var = StringLeft($var, StringLen($var) - 1)
_GUICtrlListBox_ResetContent($List1)
_filelist($Dir)
$pathArray=StringRegExp($str,'.+\\',3)
$Path = _ArrayUnique($pathArray)
For $i=1 To $path[0]
GUICtrlSetData($List1,$path[$i])
Next
EndIf
EndSwitch
WEnd
Func _filelist($searchdir)
$search = FileFindFirstFile($searchdir & "\*.*") ;;;;查指定目录下的文件
If $search = -1 Then Return -1 ;;;;如果找不到,返回值 -1
While 1
$file = FileFindNextFile($search) ;;;查找下一个文件
If @error Then ;;;如果找不到文件
FileClose($search) ;;;则关闭此句柄
Return ;;;返回
ElseIf $file = "." Or $file = ".." Then ;;如果找到的文件名为.或..则ContinueLoop
ContinueLoop ;;;在某些版本的AU3里面可以不需要上行和这行。
ElseIf StringInStr(FileGetAttrib($searchdir & "" & $file), "D") Then;;如果找到的是一个文件夹,则
_filelist($searchdir & "" & $file) ;;递归调用filelist函数,并传参数 "$searchdir & "" & $file"
EndIf ;;;$file为查找到的文件夹名称,上一行意思就是进入此文件夹继续查找文件.如此循环
If StringInStr($file, '.inf') Then $str &= $searchdir & "" & $file & @CRLF;_ArrayAdd($filelist,$searchdir & "" & $file );MsgBox( 0,0,$searchdir & "" & $file & @crlf )
WEnd
EndFunc ;==>_filelist
|