求助怎样用 AutoIT 实现读取文件夹列表功能?
请问,想读取指定目录下的全部文件并建立列表到 TXT 文件中,会有四、五层的子文件夹,但只能用 DOS 下的 DIR 命令实现吗?求助怎样用 AutoIT 实现这个功能?
[ 本帖最后由 zxyy 于 2009-3-5 17:52 编辑 ] ;===============================================================================
;
;描述: 列出目录下所有文件或文件夹,包括子文件夹.(注:autoit官方版本_FileListToArray不包括搜索子文件夹,也不支持正则表达式)
;
;函数: myFileListToArray($sPath,$rPath=0,$iFlag=0,$sPathExclude=0)
;
;参数: $sPath=要搜索的路径
; $iFlag=决定只返回文件或只返回文件夹或都返回
; $iFlag=0(Default) 返回所有文件和文件夹
; $iFlag=1 仅返回文件
; $iFlag=2 仅返回文件夹
; $rPath=用于搜索的正则表达式,用法同StringRegExp函数
; $sPathExclude=在路径中要要排除的词语,多个有,分隔
;
;最低版本需求: autoitv3.2.2.0
;返回值: 成功 -返回搜索路径中的文件和文件夹,以数组模式返回
; 失败 -返回一个空的字串,如果没有查询到符合条件的文件或文件夹,设置@error值
; @Error=1搜索路径不存在
; @Error=3搜索类型错误
; @Error=4未找到符合条件的文件(文件夹)
;
;标注: 返回的数字的解释.
; $array=返回文件/文件夹的数量
; $array=第一个文件/文件夹
; $array=第二个文件/文件夹
; $array=第三个文件/文件夹
; $array=第四个文件/文件夹
; ......以下类推...
;===============================================================================
FuncmyFileListToArray($sPath,$rPath=0,$iFlag=0,$sPathExclude=0)
Local$asFileList
$asFileList=myFileListToArrayTemp($asFileList,$sPath,$rPath,$iFlag,$sPathExclude)
Return$asFileList
EndFunc
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
IfNotStringRegExp($sPath&"\"&$sFile,$rPath,0)Then
myFileListToArrayTemp($asFileList,$sPath&"\"&$sFile,$rPath,$iFlag,$sPathExclude)
ContinueLoop
Else
myFileListToArrayTemp($asFileList,$sPath&"\"&$sFile,$rPath,$iFlag,$sPathExclude)
EndIf
Else
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 FileDelete('out.txt')
_filelist("d:\autoit3", 'exe')
if FileExists("out.txt") then ShellExecuteWait("out.txt")
FileDelete("out.txt")
;枚举文件UDF
;作者: pcbar
;日期:2008-08-01
;$searchdir,要搜索的目录,$filetype,文件类型(如exe,txt),$outfile输出文件,可以包含路径
Func _filelist($searchdir, $filetype = "*.*", $outfile = "out.txt") ;;;函数名(形参)
Local $temp
If StringRight($searchdir, 1) <> "\" Then $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, $filetype, $outfile) ;;递归调用filelist函数,并传参数"$searchdir & "\" & $file"
EndIf ;;;$file为查找到的文件夹名称,上一行意思就是进入此文件夹继续查找文件.如此循环
If $filetype = '*.*' Then
FileWriteLine($outfile, $searchdir & $file)
Else
$temp = StringRegExp($file, '(?<=\.)\w+', 2, -1)
If IsArray($temp) And StringLower($temp) = StringLower($filetype) Then
FileWriteLine($outfile, $searchdir & $file)
EndIf
EndIf
WEnd
EndFunc ;==>_filelist 我是一个宿命论者 宿命论再一次显示了他的强大
今天晚上正好要做一个 解压缩全部压缩文件的小工具..........
谁还能逃脱宿命? 谢谢你了,感谢你们的帮助。 我是一个宿命论者 宿命论再一次显示了他的强大
今天晚上正好要做一个 解压缩全部压缩文件的小工具...... ...
sxd 发表于 2009-3-4 20:38 http://www.autoitx.com/images/common/back.gif
神,可以逃脱宿命!...因为他不是人!... 功能不错 值得学习
页:
[1]