找回密码
 加入
搜索
查看: 4940|回复: 11

[系统综合] [已解决]以下代码问题在哪?

  [复制链接]
发表于 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[0][0]
                $search=$Array[$i][1]
                ;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[3]&"文件被搜索到")
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呀!

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-9-14 17:46:00 | 显示全部楼层
INI数据中@WindowsDir&"\*.exe"读出来之后应该变成了$search=‘@WindowsDir&"\*.exe"’,即@WindowsDir不再是宏,而变成了字符串‘@windowsDir’了

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

 楼主| 发表于 2010-9-15 07:36:05 | 显示全部楼层
回复 2# 3mile
但是我执行以下:
$search=$Array[$i][1]
MsgBox(0,"",$search)
没有显示
$search=‘@WindowsDir&"\*.exe"’的确显示的是
$search=@WindowsDir&"\*.exe"啊!
发表于 2010-9-15 08:15:48 | 显示全部楼层
回复 3# newuser

这个确实是字符串。

$Array=IniReadSection("Clean.ini","清除目录")
        For $i=1 To $Array[0][0]
                $search=$Array[$i][1]
                _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

评分

参与人数 1金钱 +20 收起 理由
newuser + 20 excute()用的很妙,谢谢!

查看全部评分

 楼主| 发表于 2010-9-15 09:21:56 | 显示全部楼层
本帖最后由 newuser 于 2010-9-15 09:34 编辑

回复 4# republican
谢谢,但还是有个问题,就是循环不执行?
首先,windows目录下有.exe和.bmp文件,现在 是只显示找到的exe后就直接退出了,为什么没搜索bmp文件?
找到答案了,是最后一条:$string[3]出问题了/
发表于 2010-9-15 09:38:16 | 显示全部楼层
回复 5# newuser
$i变量没有释放。
$Array = IniReadSection("Clean.ini", "清除目录")
For $i = 1 To $Array[0][0]
        $search = $Array[$i][1]
        _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

评分

参与人数 1金钱 +20 收起 理由
newuser + 20

查看全部评分

 楼主| 发表于 2010-9-15 09:48:02 | 显示全部楼层
回复 6# 3mile
如何处理没有找到的文件?就是如果指定类型文件没有找到就再返回for循环继续下一个类型的寻找,直到所有类型都循环完毕.
发表于 2010-9-15 09:53:00 | 显示全部楼层
回复 7# newuser
刚在AFan那儿学了一句:二氧化钙啊。
6楼没有解决吗?
你的14行Dim $i,第17行$i+1。再看第2行,For $i=0。
第17行的变量 $i 没有释放啊。
改变量吧,变量改成dim $n可搞定。
 楼主| 发表于 2010-9-15 10:07:52 | 显示全部楼层
回复 8# 3mile
呵呵,是我没叙述明白,因为有的类型文件目录里没有,既执行到以下代码:
If $search1 = -1 Then


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


        EndIf
我的意思是当显示"没有文件/目录 匹配搜索",就不继续执行下面的代码了,而是返回到for循环接着找下一个类型文件.
另外再请教一个问题:msgbox()里的信息如何获得,能用wingettext()获得吗?我正在测试,还没结果!
发表于 2010-9-15 10:27:55 | 显示全部楼层
1、在MSGBOX后面增加一行:RETURN -1。
2、没必要获得MSGBOX里的信息吧。可以把所有搜索到的文件加入到数组里吧。
 楼主| 发表于 2010-9-15 10:28:07 | 显示全部楼层
回复 8# 3mile
觉得还是这样显示比较好些!
$Array = IniReadSection("Clean.ini", "更新目录")
For $i = 1 To $Array[0][0]
        $search = $Array[$i][1]
        _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
发表于 2010-9-15 10:37:34 | 显示全部楼层
给个思路,未作深入。
#include <array.au3>
Global $File_Array[1][2]
$Array = IniReadSection("Clean.ini", "清除目录")
For $i = 1 To $Array[0][0]
        $search = $Array[$i][1]
        _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[UBound($File_Array)+1][2]
                $file = FileFindNextFile($search1)
                If @error Then ExitLoop
                $File_Array[UBound($File_Array)-1][0]=Execute($search)
                $File_Array[UBound($File_Array)-1][1]=$file
                ;$n += 1
        WEnd
        FileClose($search1)
        ;MsgBox(0, "搜索结果", "总共有" & $n & "个" & "文件被搜索到")
EndFunc   ;==>_Find

评分

参与人数 1金钱 +30 收起 理由
newuser + 30 非常感谢!

查看全部评分

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

本版积分规则

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

GMT+8, 2024-10-3 06:36 , Processed in 0.130802 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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