[已解决]以下代码问题在哪?
本帖最后由 newuser 于 2010-9-15 09:35 编辑;$search=@WindowsDir&"\*.exe"
FileInstall(@ScriptDir&"\Clean.ini",@TempDir&"\Clean.ini",1)
$Array=IniReadSection(@TempDir&"\Clean.ini","清除目录")
If @error Then
MsgBox(4096,"","读取INI文件失败")
Exit
Else
For $i=1 To $Array
$search=$Array[$i]
;MsgBox(0,"",$search)
_Find($search)
Next
EndIf
_Find($search)
Func _Find($search)
$search1=FileFindFirstFile($search)
If $search1=-1 Then
MsgBox(0, "错误", "没有文件/目录 匹配搜索")
EndIf
While 1
Dim $i
$file=FileFindNextFile($search1)
If @error Then ExitLoop
$i +=1
WEnd
FileClose($search1)
$string=StringSplit($search,"\",1)
MsgBox(0,"搜索结果","总共有"&$i&"个"&$string&"文件被搜索到")
EndFunc
Clean.ini内容如下:
[清除目录]
1=@WindowsDir&"\*.exe"
2=@WindowsDir&"\*.bmp"
3=@WindowsDir&"\*.log"
4=@WindowsDir&"\*.gid"
5=@WindowsDir&"\*.old"
6=@WindowsDir&"\*.chk"
7=@WindowsDir&"\*.bak"
8=@SystemDir&"\*.tmp"
9=@SystemDir&"\*._mp"
10=@SystemDir&"\*.log"
11=@SystemDir&"\*.gid"
12=@SystemDir&"\*.old"
13=@SystemDir&"\*.chk"
14=@SystemDir&"\*.bak"
为什么显示:"没有文件/目录 匹配搜索",最起码windows目录下有exe呀! INI数据中@WindowsDir&"\*.exe"读出来之后应该变成了$search=‘@WindowsDir&"\*.exe"’,即@WindowsDir不再是宏,而变成了字符串‘@windowsDir’了 回复 2# 3mile
但是我执行以下:
$search=$Array[$i]
MsgBox(0,"",$search)
没有显示
$search=‘@WindowsDir&"\*.exe"’的确显示的是
$search=@WindowsDir&"\*.exe"啊! 回复 3# newuser
这个确实是字符串。
$Array=IniReadSection("Clean.ini","清除目录")
For $i=1 To $Array
$search=$Array[$i]
_Find($search)
Next
Func _Find($search)
$search1=FileFindFirstFile(Execute($search))
If $search1=-1 Then
MsgBox(0, "错误", "没有文件/目录 匹配搜索")
EndIf
While 1
Dim $i
$file=FileFindNextFile($search1)
If @error Then ExitLoop
$i +=1
WEnd
FileClose($search1)
MsgBox(0,"搜索结果","总共有"&$i&"个"&"文件被搜索到")
EndFunc 本帖最后由 newuser 于 2010-9-15 09:34 编辑
回复 4# republican
谢谢,但还是有个问题,就是循环不执行?
首先,windows目录下有.exe和.bmp文件,现在 是只显示找到的exe后就直接退出了,为什么没搜索bmp文件?
找到答案了,是最后一条:$string出问题了/ 回复 5# newuser
$i变量没有释放。
$Array = IniReadSection("Clean.ini", "清除目录")
For $i = 1 To $Array
$search = $Array[$i]
_Find($search)
Next
Func _Find($search)
$search1 = FileFindFirstFile(Execute($search))
If $search1 = -1 Then
MsgBox(0, "错误", "没有文件/目录 匹配搜索")
EndIf
While 1
Dim $n
$file = FileFindNextFile($search1)
If @error Then ExitLoop
$n += 1
WEnd
FileClose($search1)
MsgBox(0, "搜索结果", "总共有" & $n & "个" & "文件被搜索到")
EndFunc ;==>_Find 回复 6# 3mile
如何处理没有找到的文件?就是如果指定类型文件没有找到就再返回for循环继续下一个类型的寻找,直到所有类型都循环完毕. 回复 7# newuser
刚在AFan那儿学了一句:二氧化钙啊。
6楼没有解决吗?
你的14行Dim $i,第17行$i+1。再看第2行,For $i=0。
第17行的变量 $i 没有释放啊。
改变量吧,变量改成dim $n可搞定。 回复 8# 3mile
呵呵,是我没叙述明白,因为有的类型文件目录里没有,既执行到以下代码:
If $search1 = -1 Then
MsgBox(0, "错误", "没有文件/目录 匹配搜索")
EndIf
我的意思是当显示"没有文件/目录 匹配搜索",就不继续执行下面的代码了,而是返回到for循环接着找下一个类型文件.
另外再请教一个问题:msgbox()里的信息如何获得,能用wingettext()获得吗?我正在测试,还没结果! 1、在MSGBOX后面增加一行:RETURN -1。
2、没必要获得MSGBOX里的信息吧。可以把所有搜索到的文件加入到数组里吧。 回复 8# 3mile
觉得还是这样显示比较好些!$Array = IniReadSection("Clean.ini", "更新目录")
For $i = 1 To $Array
$search = $Array[$i]
_Find($search)
Next
Func _Find($search)
$search1 = FileFindFirstFile(Execute($search))
$string=Execute($search)
If $search1 = -1 Then
;MsgBox(0, "错误", "没有文件/目录 匹配搜索")
$n=0
EndIf
While 1
Dim $n
$file = FileFindNextFile($search1)
If @error Then ExitLoop
$n += 1
WEnd
FileClose($search1)
MsgBox(0, "搜索结果", $string&"下总共有" & $n & "个" & "该类型文件被搜索到")
EndFunc ;==>_Find 给个思路,未作深入。
#include <array.au3>
Global $File_Array
$Array = IniReadSection("Clean.ini", "清除目录")
For $i = 1 To $Array
$search = $Array[$i]
_Find($search)
Next
_ArrayDisplay($File_Array)
Func _Find($search)
$search1 = FileFindFirstFile(Execute($search))
If $search1 = -1 Then
;MsgBox(0, "错误", "没有文件/目录 匹配搜索")
Return -1
EndIf
While 1
;Dim $n
ReDim $File_Array
$file = FileFindNextFile($search1)
If @error Then ExitLoop
$File_Array=Execute($search)
$File_Array=$file
;$n += 1
WEnd
FileClose($search1)
;MsgBox(0, "搜索结果", "总共有" & $n & "个" & "文件被搜索到")
EndFunc ;==>_Find
页:
[1]