ckoo 发表于 2014-10-13 16:05:34

遍历子目录求助

当前目录下有多个子目录每个里面有一个DCCS.exe文件
想遍历所有子目录找到该程序并执行,该怎么写代码哦。

haijie1223 发表于 2014-10-13 22:31:19

_FileListToArray

kemyliu 发表于 2014-10-14 14:02:48

看代码吧!之前论坛高手的代码。搜索速度很快!!#Include <Array.au3>
Dim $dirlist,$dirarry
$dirlist=_FileListEx("c:\windows")
$dirarry=StringSplit($dirlist,"|")
_ArrayDisplay($dirarry)

Func _FileListEx($sDir)
      If StringInStr(FileGetAttrib($sDir),"D")=0 Then Return SetError(1,0,"")
      Local $oFSO = ObjCreate("Scripting.FileSystemObject")
      Local $objDir
                Local $Sources=$sDir
      Local $aDir = StringSplit($sDir, "|", 2)
      Local $iCnt = 0
      Local $sFiles = "",$Attributes,$DateCreated,$DateLastAccessed,$DateLastModified,$ShortName,$ShortPath,$Size,$Type
      Do
                $objDir = $oFSO.GetFolder($aDir[$iCnt])
                For $aItem In $objDir.SubFolders
                        ;扩展应用改下这句, 如指定文件夹 If StringInStr($aItem.Name, "XXX") Then
                        $sDir &= "|" & $aItem.Path
                        ;文件夹层数可以通过 StringReplace($aItem.Path, "\", "", 0, 1)的@extended值来判断
                Next
                ;如果仅找文件夹,不找文件,$sFiles的语句都不用,最后是 Return $sDir
                For $aItem In $objDir.Files
                        ;扩展应用改下面这句
                                               $sFiles &= $aItem.Path & "|"
                        ;$sFiles &= StringRight($aItem.Path,StringLen($aItem.Path)-StringLen($Sources)-1) & "|"
                        ;例如要找文件名中包含"kb"(不分大小写),改为: if StringInStr($aItem.Name, "kb") Then $sFiles &= $aItem.Path & "|"
                        ;其他应用请参照上例修改: $aItem.XXX
                                                #cs
                        $Attributes &= $aItem.Attributes & "|"        ;Attributes      设置或返回文件或文件夹的属性
                        $DateCreated &= $aItem.DateCreated & "|"        ;DateCreated   返回指定的文件或文件夹的创建日期和时间。只读
                        $DateLastAccessed &= $aItem.DateLastAccessed & "|"        ;DateLastAccessed 返回指定的文件或文件夹的上次访问日期(和时间)。只读
                        $DateLastModified &= $aItem.DateLastModified & "|"        ;DateLastModified 返回指定的文件或文件夹的上次修改日期和时间。只读
                        $ShortName &= $aItem.ShortName & "|"        ;ShortName   返回按照早期8.3文件命名约定转换的短文件名
                        $ShortPath &= $aItem.ShortPath& "|"        ;ShortPath   返回按照早期8.3命名约定转换的短路径名
                        $Size &= $aItem.Size & "|"        ;Size    对于文件返回指定文件的字节数;对于文件夹,返回文件夹所有的文件夹和子文件夹的字节数
                                                $Type &= $aItem.Type & "|"        ;Type    返回文件或文件夹的类型信息
                                                #ce
                Next
                $iCnt += 1
                If UBound($aDir) <= $iCnt Then $aDir = StringSplit($sDir, "|", 2)
      Until UBound($aDir) <= $iCnt
      If $sFiles Then $sFiles = StringTrimRight($sFiles, 1);去掉最右边"|"
      Return $sFiles
EndFunc

Authree 发表于 2014-10-16 17:12:51

回复 3# kemyliu


    学习了,,得慢慢研究这个有点难度,,
页: [1]
查看完整版本: 遍历子目录求助