怎样列出指定目录中的所有EXE,并显示在Combo中
本帖最后由 xlcwxl 于 2009-10-2 01:32 编辑怎样列出指定目录中的所有EXE,并显示在Combo中
UDF函数: _FileListToArray.au3FuncmyFileListToArray($sPath,$rPath=0,$iFlag=0,$sPathExclude=0)
Local$asFileList ;因为要用递归调用,$asFileList参数要单独出来
$asFileList=myFileListToArrayTemp($asFileList,$sPath,$rPath,$iFlag,$sPathExclude)
Return$asFileList
EndFunc ;==>myFileListToArray
FuncmyFileListToArrayTemp(ByRef$asFileList,$sPath,$rPath=0,$iFlag=0,$sPathExclude=0)
Local$hSearch,$sFile
IfNotFileExists($sPath)ThenReturnSetError(1,1,"")
IfNot($iFlag=0Or$iFlag=1Or$iFlag=2)ThenReturnSetError(3,3,"")
$hSearch=FileFindFirstFile($sPath&"\*")
If$hSearch=-1ThenReturnSetError(4,4,"")
While1
$sFile=FileFindNextFile($hSearch)
If@errorThen
SetError(0)
ExitLoop
EndIf
;已经被排除的路径,就不要搜索子目录了
If$sPathExcludeAndStringLen($sPathExclude)>0Then$sPathExclude=StringSplit($sPathExclude,",")
$bExclude=False
IfIsArray($sPathExclude)Then
For$ii=1To$sPathExcludeStep1
IfStringInStr($sPath&"\"&$sFile,$sPathExclude[$ii])Then
$bExclude=True
ExitLoop
EndIf
Next
EndIf
If$bExcludeThenContinueLoop
Select
CaseStringInStr(FileGetAttrib($sPath&"\"&$sFile),"D") ;如果遇到目录
Select
Case$iFlag=1 ;求文件时就递归
myFileListToArrayTemp($asFileList,$sPath&"\"&$sFile,$rPath,$iFlag,$sPathExclude)
ContinueLoop ;求文件时跳过目录
Case$iFlag=2Or$iFlag=0 ;求目录时分两种情况
If$rPathThen ;1如果要求对路径进行正则匹配
IfNotStringRegExp($sPath&"\"&$sFile,$rPath,0)Then ;正则匹配失败就递归
myFileListToArrayTemp($asFileList,$sPath&"\"&$sFile,$rPath,$iFlag,$sPathExclude)
ContinueLoop ;正则匹配失败时跳过本目录
Else ;正则匹配成功就递归,并把本目录加入匹配成功
myFileListToArrayTemp($asFileList,$sPath&"\"&$sFile,$rPath,$iFlag,$sPathExclude)
EndIf
Else ;2如果不要求对路径进行正则匹配,递归,并把本目录加入匹配成功,
myFileListToArrayTemp($asFileList,$sPath&"\"&$sFile,$rPath,$iFlag,$sPathExclude)
EndIf
EndSelect
CaseNotStringInStr(FileGetAttrib($sPath&"\"&$sFile),"D") ;如果遇到文件
If$iFlag=2ThenContinueLoop ;求目录时就跳过
;要求正则匹配路径,且匹配失败时就跳过。遇文件就不要递归调用了。
If$rPathAndNotStringRegExp($sPath&"\"&$sFile,$rPath,0)ThenContinueLoop
EndSelect
ReDim$asFileList
$asFileList=$asFileList+1
$asFileList=$sPath&"\"&$sFile
WEnd
FileClose($hSearch)
Return$asFileList
EndFunc ;==>myFileListToArrayTemp例子 - 搜索D:\autoit3所有EXE文件; *******************************************************
; 例子 - 搜索D:\autoit3所有EXE文件
; *******************************************************
#include "_FileListToArray.au3"
$sPath="D:\autoit3"
$aFile=myFileListToArray($sPath,"*.exe",1,"manifest,images")
MsgBox(0, "找到的文件", $aFile)
为什么没反映,是我代码写错了还是,UDF函数有问题? 含子目录不? 咋都这样呢!丢个问题在这里就不管了。
既然是求知,是不是该时不时的来看看呢! 3# 水木子
嗨,管呢,没回音说不定个人能力强呢,自己找到答案了 并显示在Combo中
看到这后半句,估计这楼主多半还没有基本的au3知识,就想着要做出个什么工具来了。。。 我的目的就是想列出某个文件夹下的所有EXE文件 本帖最后由 yrloy 于 2009-9-22 16:59 编辑
看一下帮助中函数文件、驱动器那段,用通配符*.EXE,然后FileFindNextFile一个个文件句柄传递就可以了,不知道你看没看过SKY皮肤例子的那个源码 如果及时配合别人提出的疑问,早解决了... 不好意思,有一点忙
页:
[1]