如何返回含有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: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 借用水木兄的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 回复 3# 3mile
借您吉言!今天稍微能起来小坐会儿了。
我又回来啦!我是不会屈服滴!{:face (301):}
PS:你啥时候离开过???嘿嘿! 木子好得挺快,很好很好~!$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好忙好忙,撤退撤退 感谢各位的热心帮忙! 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]