找回密码
 加入
搜索
查看: 3352|回复: 6

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

  [复制链接]
发表于 2010-7-12 17:31:16 | 显示全部楼层 |阅读模式
本帖最后由 仙乃日 于 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文件的目录。

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 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[0]
                        If StringRegExp($aFileList[$i], '\.inf') Then GUICtrlSetData($List1, $Path & '\' & $aFileList[$i])
                        Findfile($Path & '\' & $aFileList[$i])
                Next
        EndIf
EndFunc   ;==>Findfile

评分

参与人数 2金钱 +40 收起 理由
仙乃日 + 20 谢谢帮忙!
afan + 20

查看全部评分

发表于 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[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

评分

参与人数 2金钱 +40 收起 理由
仙乃日 + 20 谢谢帮忙!
afan + 20

查看全部评分

发表于 2010-7-12 19:02:05 | 显示全部楼层
回复 3# 3mile

借您吉言!今天稍微能起来小坐会儿了。
我又回来啦!我是不会屈服滴!


PS:你啥时候离开过???嘿嘿!
发表于 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
好忙好忙,撤退撤退

评分

参与人数 1金钱 +20 收起 理由
仙乃日 + 20 谢谢帮忙!

查看全部评分

 楼主| 发表于 2010-7-12 19:43:24 | 显示全部楼层
感谢各位的热心帮忙!
发表于 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
我用这个方法。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-3 12:32 , Processed in 0.102667 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表