已解决 怎么依次打开文件夹里面的文件
本帖最后由 itzyx 于 2020-10-21 17:16 编辑没有思路,也没有找到类似的提问,只好又来麻烦各位大佬了!
需求是这样的:现在桌面有一个 test 主文件夹,文件夹里面有 1,2,3,4,5五个子文件夹(子文件夹名称不固定,根据时间生成的);五个子文件夹 都有个1个后缀名为 .xls的表格。 怎么可以依次打开 1,2,3,4,5, 五个文件夹里面的 后缀名为 .xls的表格呢 ?用 for...in...next 可以吗?可有大佬指定一二,感谢!
afan 发表于 2020-10-19 23:53
会搜索文件就行
好的,感谢A大, 这段代码有些地方 我还要好好学习一下,暂时还没懂,不过我知道A大出手,问题肯定解决了!这个帖子我再看看 等我完全掌握了,再把问题改成已解决。再次感谢A大 会搜索文件就行
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 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大你的指点了 第 14 行的问题 ,你看了 FileFindNextFile 的帮助文档就知道,如果 @extended 为1则代表是文件夹,这里只搜索文件夹。
第 16、18 行的问题 ,ContinueLoop 的意思是退出当前这次循环,而返回到循环开始的位置,继续新的循环。
第 25 行的问题 ,SetError(2, 0, 0) 是自己设置给自己理解的,这个你练习写几个自定义函数,或者搜索 Func ... EndFunc 就明白了。
第 26 行的问题 ,正则表达式 \V+ 代表非换行字符,这里匹配的就是一行路径为数组的一个元素。
色诱就算了,论坛都是公的… 这也是最悲伤的。 afan 发表于 2020-10-21 00:09
第 14 行的问题 ,你看了 FileFindNextFile 的帮助文档就知道,如果 @extended 为1则代表是文件夹,这里只 ...
{:1_295:} 谢谢A大,下辈子作为女的 再感谢你 itzyx 发表于 2020-10-21 00:32
谢谢A大,下辈子作为女的 再感谢你
别,心理阴影面积有点大!:face (10): 学习了,像这种代码备注应该在论坛中多一些,让入门的新手可以尽快学习到要点!感谢二位!:face (10):
页:
[1]