找回密码
 加入
搜索
查看: 2365|回复: 7

[网络通信] 已解决 怎么依次打开文件夹里面的文件

[复制链接]
发表于 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 可以吗?可有大佬指定一二,感谢!
 楼主| 发表于 2020-10-20 08:25:49 | 显示全部楼层
afan 发表于 2020-10-19 23:53
会搜索文件就行

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

评分

参与人数 1金钱 +10 收起 理由
chamlien + 10 加油

查看全部评分

发表于 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
 楼主| 发表于 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大你的指点了
发表于 2020-10-21 00:09:47 | 显示全部楼层
第 14 行的问题 ,你看了 FileFindNextFile 的帮助文档就知道,如果 @extended 为1则代表是文件夹,这里只搜索文件夹。
第 16、18 行的问题 ,ContinueLoop 的意思是退出当前这次循环,而返回到循环开始的位置,继续新的循环。
第 25 行的问题 ,SetError(2, 0, 0) 是自己设置给自己理解的,这个你练习写几个自定义函数,或者搜索 Func ... EndFunc 就明白了。
第 26 行的问题 ,正则表达式 \V+ 代表非换行字符,这里匹配的就是一行路径为数组的一个元素。

色诱就算了,论坛都是公的… 这也是最悲伤的。
 楼主| 发表于 2020-10-21 00:32:42 | 显示全部楼层
afan 发表于 2020-10-21 00:09
第 14 行的问题 ,你看了 FileFindNextFile 的帮助文档就知道,如果 @extended 为1则代表是文件夹,这里只 ...

   谢谢A大,下辈子作为女的   再感谢你
发表于 2020-10-21 01:10:43 | 显示全部楼层
itzyx 发表于 2020-10-21 00:32
谢谢A大,下辈子作为女的   再感谢你

别,心理阴影面积有点大!
发表于 2020-10-23 13:15:43 | 显示全部楼层
学习了,像这种代码备注应该在论坛中多一些,让入门的新手可以尽快学习到要点!感谢二位!

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 12:37 , Processed in 0.078273 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表