找回密码
 加入
搜索
查看: 8332|回复: 15

[AU3基础] [已解决]如何去搜索指定的文件?

 火.. [复制链接]
发表于 2011-3-8 22:16:56 | 显示全部楼层 |阅读模式
本帖最后由 pdp320921 于 2011-3-31 23:03 编辑

问题如标题:

如何去搜索指定的文件?

假如我想从桌面上所有的文件夹和子文件夹里搜索1..exe的文件,该如何做?

不用DOS命令,只用AU3~~

恳请大虾赐教。
发表于 2011-3-9 00:21:56 | 显示全部楼层
$search = FileFindFirstFile("1..exe")  
; 检查搜索是否成功
If $search = -1 Then
    MsgBox(0, "错误", "没有文件/目录 匹配搜索")
    Exit
EndIf
While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
   
    MsgBox(4096, "文件:", $file)
WEnd
FileClose($search)
发表于 2011-3-9 08:26:52 | 显示全部楼层
顶楼上,要学会使用搜索功能呀,搜索文档,搜索论坛!
发表于 2011-3-9 08:58:42 | 显示全部楼层
文档里解释的很清楚啊!如2楼述!
 楼主| 发表于 2011-3-9 13:53:30 | 显示全部楼层
回复 2#

你这种方法只能搜索当前目录,而且不能遍历子目录,我想要是能够遍历子目录去搜索文件~~
发表于 2011-3-9 14:12:03 | 显示全部楼层
搜索嵌套,$attrib = FileGetAttrib(@TempDir&"\Temporary Internet Files\Content.IE5\" & $file)获得属性If StringInStr($attrib, "D") Then fs()   ,如果是D,也就是目录的的进入进目录在继续搜索。
下面的例子是我从论坛某位大侠的脚本修改过来的,嵌套了一次,我找的文件名是“createVerifyImageServlet*.*”
$search = FileFindFirstFile(@TempDir&"\Temporary Internet Files\Content.IE5\*.*")  
If $search = -1 Then        
        Exit
EndIf
While 1
        $file = FileFindNextFile($search)
        If @error Then ExitLoop
        $attrib = FileGetAttrib(@TempDir&"\Temporary Internet Files\Content.IE5" & $file)
If StringInStr($attrib, "D") Then fs()            
WEnd
FileClose($search)
Func fs()
$search1 = FileFindFirstFile(@TempDir&"\Temporary Internet Files\Content.IE5" & $file & "\createVerifyImageServlet*.*")
While 1
        $file1 = FileFindNextFile($search1) 
        If @error Then ExitLoop
        FileMove(@TempDir&"\Temporary Internet Files\Content.IE5" & $file & "" & $file1,@TempDir & "\TxtFiles",9)
WEnd
FileClose($search1)
EndFunc
发表于 2011-3-9 14:24:32 | 显示全部楼层
#include <File.au3>
_FindFile(@DesktopDir, '1.exe')

Func _FindFile($sPath, $sFileName = '')
        $aFileList = _FileListToArray($sPath)
        If Not @error Then
                For $i = 1 To $aFileList[0]
                        If $aFileList[$i] = $sFileName Then Return MsgBox(0, '', $sPath & '\' & $aFileList[$i])
                        _FindFile($sPath & '\' & $aFileList[$i])
                Next
        EndIf
EndFunc   ;==>_FindFile
 楼主| 发表于 2011-3-9 21:30:55 | 显示全部楼层
回复 #7

还是不行,只能搜索Desktop目录下的1.exe,不能遍历子目录去搜寻~~
发表于 2011-3-9 21:43:04 | 显示全部楼层
回复 8# pdp320921


   
#include <File.au3>
_FindFile(@DesktopDir, '1.exe')

Func _FindFile($sPath, $sFileName)
        $aFileList = _FileListToArray($sPath)
        If Not @error Then
                For $i = 1 To $aFileList[0]
                        If $aFileList[$i] = $sFileName Then Return MsgBox(0, '', $sPath & '\' & $aFileList[$i])
                        _FindFile($sPath & '\' & $aFileList[$i], $sFileName)
                Next
        EndIf
EndFunc   ;==>_FindFile
 楼主| 发表于 2011-3-9 23:10:15 | 显示全部楼层
回复 9# 水木子

感谢版主的分享。仔细看了下代码,真够经典。

但是还存在一个问题,你的代码是搜到第一个1.exe后就结束显示其路径,如果后面还有1.exe则无法显示,不能达到dos下:for /r %userprofile%\desktop in (1.exe) do @echo %a的效果 ~~
发表于 2011-3-10 09:05:19 | 显示全部楼层
本帖最后由 水木子 于 2011-3-10 09:14 编辑

回复 10# pdp320921
嗯!这只是为了实现你的目的而写,从严谨的角度来看肯定还存在不少问题,比如将它写成函数调用那么成功和失败的返回值肯定是少不了的。
发表于 2011-12-26 15:15:00 | 显示全部楼层
学习了。。试试。。
发表于 2012-7-21 21:41:31 | 显示全部楼层
简洁,经典,学习了!!
发表于 2013-12-6 16:44:31 | 显示全部楼层
感谢分享,谢谢大大们的帮助
发表于 2014-5-15 08:21:21 | 显示全部楼层
雷锋精神传天下!谢谢分享!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-20 10:21 , Processed in 0.084000 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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