newuser 发表于 2010-9-14 16:15:56

[已解决]以下代码问题在哪?

本帖最后由 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呀!

3mile 发表于 2010-9-14 17:46:00

INI数据中@WindowsDir&"\*.exe"读出来之后应该变成了$search=‘@WindowsDir&"\*.exe"’,即@WindowsDir不再是宏,而变成了字符串‘@windowsDir’了

newuser 发表于 2010-9-15 07:36:05

回复 2# 3mile
但是我执行以下:
$search=$Array[$i]
MsgBox(0,"",$search)
没有显示
$search=‘@WindowsDir&"\*.exe"’的确显示的是
$search=@WindowsDir&"\*.exe"啊!

republican 发表于 2010-9-15 08:15:48

回复 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:21:56

本帖最后由 newuser 于 2010-9-15 09:34 编辑

回复 4# republican
谢谢,但还是有个问题,就是循环不执行?
首先,windows目录下有.exe和.bmp文件,现在 是只显示找到的exe后就直接退出了,为什么没搜索bmp文件?
找到答案了,是最后一条:$string出问题了/

3mile 发表于 2010-9-15 09:38:16

回复 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

newuser 发表于 2010-9-15 09:48:02

回复 6# 3mile
如何处理没有找到的文件?就是如果指定类型文件没有找到就再返回for循环继续下一个类型的寻找,直到所有类型都循环完毕.

3mile 发表于 2010-9-15 09:53:00

回复 7# newuser
刚在AFan那儿学了一句:二氧化钙啊。
6楼没有解决吗?
你的14行Dim $i,第17行$i+1。再看第2行,For $i=0。
第17行的变量 $i 没有释放啊。
改变量吧,变量改成dim $n可搞定。

newuser 发表于 2010-9-15 10:07:52

回复 8# 3mile
呵呵,是我没叙述明白,因为有的类型文件目录里没有,既执行到以下代码:
If $search1 = -1 Then


                MsgBox(0, "错误", "没有文件/目录 匹配搜索")


      EndIf
我的意思是当显示"没有文件/目录 匹配搜索",就不继续执行下面的代码了,而是返回到for循环接着找下一个类型文件.
另外再请教一个问题:msgbox()里的信息如何获得,能用wingettext()获得吗?我正在测试,还没结果!

3mile 发表于 2010-9-15 10:27:55

1、在MSGBOX后面增加一行:RETURN -1。
2、没必要获得MSGBOX里的信息吧。可以把所有搜索到的文件加入到数组里吧。

newuser 发表于 2010-9-15 10:28:07

回复 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

3mile 发表于 2010-9-15 10:37:34

给个思路,未作深入。
#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]
查看完整版本: [已解决]以下代码问题在哪?