itzyx 发表于 2020-10-19 23:12:56

已解决 怎么依次打开文件夹里面的文件

本帖最后由 itzyx 于 2020-10-21 17:16 编辑

没有思路,也没有找到类似的提问,只好又来麻烦各位大佬了!
需求是这样的:现在桌面有一个 test 主文件夹,文件夹里面有 1,2,3,4,5五个子文件夹(子文件夹名称不固定,根据时间生成的);五个子文件夹 都有个1个后缀名为 .xls的表格。 怎么可以依次打开 1,2,3,4,5, 五个文件夹里面的 后缀名为 .xls的表格呢 ?用 for...in...next 可以吗?可有大佬指定一二,感谢!

itzyx 发表于 2020-10-20 08:25:49

afan 发表于 2020-10-19 23:53
会搜索文件就行

好的,感谢A大, 这段代码有些地方 我还要好好学习一下,暂时还没懂,不过我知道A大出手,问题肯定解决了!这个帖子我再看看 等我完全掌握了,再把问题改成已解决。再次感谢A大

afan 发表于 2020-10-19 23:53:01

会搜索文件就行
Local $aFile = _Search(@DesktopDir & '\Test')
If @error Then Exit MsgBox(48, '', '无指定文件')
For $ii = 0 To UBound($aFile) - 1
        ShellExecute($aFile[$ii])
Next

Func _Search($sDir)
        Local $hSearch = FileFindFirstFile($sDir & '\*')
        If $hSearch = -1 Then Return SetError(1, 0, 0)
        Local $sFileName = '', $iResult = 0
        Local $hSearch1, $sFileName1, $sFiles = ''
        Do
                $sFileName = FileFindNextFile($hSearch)
                If @error Then ExitLoop
                If @extended Then
                        $hSearch1 = FileFindFirstFile($sDir & '\' & $sFileName & '\*.xls')
                        If $hSearch1 = -1 Then ContinueLoop
                        $sFileName1 = FileFindNextFile($hSearch1)
                        If @error Then ContinueLoop
                        $sFiles &= $sDir & '\' & $sFileName & '\' & $sFileName1 & @LF
                EndIf
        Until 0
        FileClose($hSearch)
        If $hSearch = '' Then Return SetError(2, 0, 0)
        Return StringRegExp($sFiles, '\V+', 3)
EndFunc   ;==>_Search

itzyx 发表于 2020-10-20 23:53:30

afan 发表于 2020-10-19 23:53
会搜索文件就行

Local $aFile = _Search(@DesktopDir & '\Test')    ;搜素桌面Test文件夹 里面的文件
If @error Then Exit MsgBox(48, '', '无指定文件');如果没有,退出程序;
For $ii = 0 To UBound($aFile) - 1               ;依次打开文件夹里面的.xls 文件,UBound 是获得数组某一维的数量,那UBound($aFile) - 1即为获得最大索引
      ShellExecute($aFile[$ii])               ;运行文件
Next

Func _Search($sDir)
      Local $hSearch = FileFindFirstFile($sDir & '\*')   ;搜素\* 的文件,成功返回句柄
      If $hSearch = -1 Then Return SetError(1, 0, 0)   ;如果没有找到搜索对象,将@error设置为1,@extended 设置为0,返回值0
      Local $hSearch1, $sFileName1, $sFiles = ''         ;定义变量
      Do
                $sFileName = FileFindNextFile($hSearch)    ;返回文件名
                If @error Then ExitLoop                  ;如果文件夹为空,退出 Do 循环
                If @extended Then                        ;如果@extended 什么意思?函数的扩展返回嘛,但是这个怎么用的
                        $hSearch1 = FileFindFirstFile($sDir & '\' & $sFileName & '\*.xls');搜素& $sFileName & '\*.xls的文件,成功返回句柄
                        If $hSearch1 = -1 Then ContinueLoop   ;这里没有搜索对象,还继续循环嘛?
                        $sFileName1 = FileFindNextFile($hSearch1)
                        If @error Then ContinueLoop            ;这段也没懂什么意思
                        $sFiles &= $sDir & '\' & $sFileName & '\' & $sFileName1 & @LF
                EndIf
      Until 0
      FileClose($hSearch)   ;关闭 FileFindFirstFile() 函数返回的搜索句柄.


      If $hSearch = '' Then Return SetError(2, 0, 0)    ;这里SetError(2, 0, 0) 也不太懂什么意思
      Return StringRegExp($sFiles, '\V+', 3)            ;检查字串是否匹配指定的正则表达式,但是'\V+', 3 我也理解不了
EndFunc   ;==>_Search


不行,我这个零基础的人实在太蠢了,A大你给的 一段代码好多都理解不了,但是我又特别想知道 怎么回事,恳请 A大能帮忙讲解一下!
说实在的来论坛,一个多月了,提的绝大数AU3 问题都是A大为我解决的, 很想表示一下,但给A大你金钱吧你是版主 也不缺钱, 美色诱惑吧,你是男的,也不行 。 我只希望在以后的日子里可以好好学习AU3,推广AU3,来感谢A大你的指点了

afan 发表于 2020-10-21 00:09:47

第 14 行的问题 ,你看了 FileFindNextFile 的帮助文档就知道,如果 @extended 为1则代表是文件夹,这里只搜索文件夹。
第 16、18 行的问题 ,ContinueLoop 的意思是退出当前这次循环,而返回到循环开始的位置,继续新的循环。
第 25 行的问题 ,SetError(2, 0, 0) 是自己设置给自己理解的,这个你练习写几个自定义函数,或者搜索 Func ... EndFunc 就明白了。
第 26 行的问题 ,正则表达式 \V+ 代表非换行字符,这里匹配的就是一行路径为数组的一个元素。

色诱就算了,论坛都是公的… 这也是最悲伤的。

itzyx 发表于 2020-10-21 00:32:42

afan 发表于 2020-10-21 00:09
第 14 行的问题 ,你看了 FileFindNextFile 的帮助文档就知道,如果 @extended 为1则代表是文件夹,这里只 ...

{:1_295:}   谢谢A大,下辈子作为女的   再感谢你

afan 发表于 2020-10-21 01:10:43

itzyx 发表于 2020-10-21 00:32
谢谢A大,下辈子作为女的   再感谢你

别,心理阴影面积有点大!:face (10):

zpmc123 发表于 2020-10-23 13:15:43

学习了,像这种代码备注应该在论坛中多一些,让入门的新手可以尽快学习到要点!感谢二位!:face (10):

页: [1]
查看完整版本: 已解决 怎么依次打开文件夹里面的文件