pdp320921 发表于 2011-3-8 22:16:56

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

本帖最后由 pdp320921 于 2011-3-31 23:03 编辑

问题如标题:

如何去搜索指定的文件?

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

不用DOS命令,只用AU3~~

恳请大虾赐教。

annybaby 发表于 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)

nxbigdaddy 发表于 2011-3-9 08:26:52

顶楼上,要学会使用搜索功能呀,搜索文档,搜索论坛!

hanyunhui200 发表于 2011-3-9 08:58:42

文档里解释的很清楚啊!如2楼述!

pdp320921 发表于 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
                        If $aFileList[$i] = $sFileName Then Return MsgBox(0, '', $sPath & '\' & $aFileList[$i])
                        _FindFile($sPath & '\' & $aFileList[$i])
                Next
        EndIf
EndFunc   ;==>_FindFile

pdp320921 发表于 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
                        If $aFileList[$i] = $sFileName Then Return MsgBox(0, '', $sPath & '\' & $aFileList[$i])
                        _FindFile($sPath & '\' & $aFileList[$i], $sFileName)
                Next
        EndIf
EndFunc   ;==>_FindFile

pdp320921 发表于 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
嗯!这只是为了实现你的目的而写,从严谨的角度来看肯定还存在不少问题,比如将它写成函数调用那么成功和失败的返回值肯定是少不了的。

pingfan5888 发表于 2011-12-26 15:15:00

学习了。。试试。。

raeast 发表于 2012-7-21 21:41:31

简洁,经典,学习了!!

ak47gglllk 发表于 2013-12-6 16:44:31

感谢分享,谢谢大大们的帮助

hollandmfq 发表于 2014-5-15 08:21:21

雷锋精神传天下!谢谢分享!
页: [1] 2
查看完整版本: [已解决]如何去搜索指定的文件?