仙乃日 发表于 2010-7-12 17:31:16

如何返回含有INF文件的目录?[已解决]

本帖最后由 仙乃日 于 2010-7-12 19:42 编辑


Func DevicePath($Dir)
        Global $dir_return
        If StringRight($Dir, 1)<>"\" Then $Dir=$Dir&"\"
    Local $search = FileFindFirstFile($Dir & "*.*")
While 1
    Local $file = FileFindNextFile($search)
    If @error Then ExitLoop
    If StringInStr(FileGetAttrib($Dir&"\"&$file),"D") Then
                $dir_return &= ";"&$Dir&$file
                DevicePath($Dir&$file)
                ContinueLoop
        EndIf
WEnd
FileClose($search)
Return $dir_return
EndFunc
如果要更改成只返回包含有*.inf文件的目录。

水木子 发表于 2010-7-12 18:40:32

本帖最后由 水木子 于 2010-7-12 18:56 编辑

#include <File.au3>
#include <GuiListBox.au3>
#include <WindowsConstants.au3>

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
                        $var = FileSelectFolder("选择一个文件夹.", "")
                        If @error <> 1 Then
                                GUICtrlSetData($Input1, $var)
                                If StringRight($var, 1) = '\' Then $var = StringLeft($var, StringLen($var) - 1)
                                _GUICtrlListBox_ResetContent($List1)
                                Findfile($var)
                              MsgBox(0, '提示!', '搜索结束!')
                        EndIf
        EndSwitch
WEnd

Func Findfile($Path)
        $aFileList = _FileListToArray($Path)
        If Not @error Then
                For $i = 1 To $aFileList
                        If StringRegExp($aFileList[$i], '\.inf') Then GUICtrlSetData($List1, $Path & '\' & $aFileList[$i])
                        Findfile($Path & '\' & $aFileList[$i])
                Next
        EndIf
EndFunc   ;==>Findfile

3mile 发表于 2010-7-12 18:59:38

借用水木兄的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
                                                                        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

水木子 发表于 2010-7-12 19:02:05

回复 3# 3mile

借您吉言!今天稍微能起来小坐会儿了。
我又回来啦!我是不会屈服滴!{:face (301):}


PS:你啥时候离开过???嘿嘿!

afan 发表于 2010-7-12 19:09:20

木子好得挺快,很好很好~!$l = DevicePath(@WindowsDir)
MsgBox(0, 0, $l)

Func DevicePath($Dir, $sFile = '.inf')
        ;这里的$sFile参数仅可使用文件的后缀名,如“.inf”、“.au3”等
        Global $dir_return
        If StringRight($Dir, 1) <> '\' Then $Dir = $Dir & '\'
        Local $search = FileFindFirstFile($Dir & '*')
        While 1
                Local $file = FileFindNextFile($search)
                If @error Then ExitLoop
                If StringInStr(FileGetAttrib($Dir & $file), 'D') Then
                        DevicePath($Dir & $file, $sFile)
                        ContinueLoop
                EndIf
                If StringRight($file, 4) = $sFile Then
                        If Not IsDeclared('_' & $Dir) Then
                                $dir_return &= $Dir & @LF ;$dir_return &= ';' & $Dir
                                Assign('_' & $Dir, 0)
                        EndIf
                EndIf
        WEnd
        FileClose($search)
        Return $dir_return
EndFunc   ;==>DevicePath好忙好忙,撤退撤退

仙乃日 发表于 2010-7-12 19:43:24

感谢各位的热心帮忙!

qq342252004 发表于 2010-7-23 21:37:40

Local $ml=''
_filelist(@WindowsDir)
MsgBox(0,'',$ml)
Func _filelist($searchdir)
        $search = FileFindFirstFile($searchdir & "\*.*")
        If $search = -1 Then Return -1
        While 1
                $file = FileFindNextFile($search)
                If @error Then
                                FileClose($search)
                                Return
                        ElseIf $file = "." Or $file = ".." Then
                                        ContinueLoop
                        ElseIf StringInStr(FileGetAttrib($searchdir & "\" & $file), "D") Then
                                If FileExists($searchdir & "\" & $file&"\*.inf") Then
                                        $ml&=$searchdir & "\" & $file&@LF
                                EndIf
                                _filelist($searchdir & "\" & $file)
                EndIf
        WEnd
EndFunc我用这个方法。
页: [1]
查看完整版本: 如何返回含有INF文件的目录?[已解决]