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

[AU3基础] 遍历所有目录找到文件夹,并执行此文件夹下所有EXE程序的AU3脚本。

 火.. [复制链接]
发表于 2011-6-23 22:35:32 | 显示全部楼层 |阅读模式
本帖最后由 heimahack 于 2011-6-24 09:53 编辑

求此代码,要求搜索所有盘符(包括光驱与U盘盘符)和所有目录下面的Autosoft文件夹下面的1.exe,找到后执行Autosoft文件夹下面所有EXE程序。
发表于 2011-6-24 07:51:48 | 显示全部楼层
本帖最后由 虫子樱桃 于 2011-6-24 12:32 编辑
#Include <File.au3>
Dim $u,$i,$j,$file
Func executegunction()
        $u = DriveGetDrive("ALL")
        For $i In $u
                $file = _FileListToArray($i&"\Autosoft","*.exe",1)
                  For $j In $file
                          ShellExecute($i&"\Autosoft"&$j)
                  Next
        Next
EndFunc
写了一个,没测试,可能会有问题。哈哈。上班了,基本思路就是这样。。。
发表于 2011-6-24 08:08:24 | 显示全部楼层
这个很明显是想写病毒的............
 楼主| 发表于 2011-6-24 09:51:39 | 显示全部楼层
本帖最后由 heimahack 于 2011-6-24 09:54 编辑

不是写病毒, 我是做系统安装版定制,需要在T13时运行目录下的文件,但光盘安装的时候这个目录是在光盘下面I138文件夹下,而在PE下用虚拟光驱来安装时,这个目录会复制到硬盘上,在C:\WINDOWS\下面。所以得找个这样的程序。还有, 谢谢楼上的代码,可是不成功
发表于 2011-6-24 12:10:52 | 显示全部楼层
#Include <File.au3>
$Drive= DriveGetDrive( "all" )

For $i = 1 to $Drive[0]
       Find_folder($Drive[$i])
Next

Func Find_folder($searchdir)                          
$search = FileFindFirstFile($searchdir & "\*")
If $search = -1 Then return -1
While 1
    $file = FileFindNextFile($search)
    If @error Then
         FileClose($search)
         return
        ElseIf stringinstr(FileGetAttrib($searchdir & "" & $file),"D") then
                 If $file="Autosoft" Then
                        $FileList=_FileListToArray($searchdir & "" & $file,'*.exe',1)
                         If Not @error Then
                                 For $j=1 To $FileList[0]
                                         ShellExecute($searchdir & "" & $file&""&$FileList[$j])
                                 Next
                         EndIf
             Else
                     Find_folder($searchdir & "" & $file)
                 EndIf
    EndIf
WEnd
EndFunc
 
发表于 2011-6-24 12:31:49 | 显示全部楼层
回复 4# heimahack


    额,函数调用没呢???
 楼主| 发表于 2011-6-24 15:46:56 | 显示全部楼层
本帖最后由 heimahack 于 2011-6-24 16:16 编辑

回复 6# 虫子樱桃
谢谢大侠,你的这段是对的。但如果我想指定搜索的文件名是Autosoft\1.exe文件,然后执行与1.EXE目录下所有文件呢?我的意思是以Autosoft\1.exe为判断,如果其它目录有Autosoft这个文件夹,但在Autosoft\下并没有1.exe这个文件,就不执行,如果搜到Autosoft文件夹,并且Autosoft下面有1.exe文件,才执行这个目录下面的所有EXE文件,这又该怎么做呢?
发表于 2011-6-24 16:41:36 | 显示全部楼层
楼主试着自己加些条件就行了,大框架就是上面的代码了
 楼主| 发表于 2011-6-24 17:31:35 | 显示全部楼层
#Include <File.au3>
$Drive= DriveGetDrive( "all" )
For $i = 1 to $Drive[0]
       Find_folder($Drive[$i])
Next
Func Find_folder($searchdir)                          
$search = FileFindFirstFile($searchdir & "\*")
If $search = -1 Then return -1
While 1
    $file = FileFindNextFile($search)
    If @error Then
         FileClose($search)
         return
        ElseIf stringinstr(FileGetAttrib($searchdir & "" & $file),"D") then
                 If $file="Svcpack" Then
                        $FileList=_FileListToArray($searchdir & "" & $file,'*.exe',1)
                         If Not @error Then
                                 For $j=1 To $FileList[0]
                                         ShellExecute($searchdir & "" & $file&""&$FileList[$j])
                                 Next
             EXIT
                         EndIf
             Else
                     Find_folder($searchdir & "" & $file)
                 EndIf
    EndIf
WEnd
EndFunc
Sleep(3000)
MsgBox(0,"Error!!!","对不起,没有找到AutoRun文件夹!")
我加了个退出命令,原创的执行找到程序后AU3没有退出。所以加了句进去。不好意思。
但我还是想以Autosoft\1.EXE来做判断。就是不懂AU3
发表于 2011-6-24 18:22:59 | 显示全部楼层
回复 7# heimahack


                          If Not FileExists($i&"\Autosoft\1.exe")
                           Return $i
                           EndIf
在 For $i In $u这一行下面加这样一个判断试试。偶是菜鸟,不知道正确不正确、、、、、
发表于 2011-6-24 20:11:18 | 显示全部楼层
本帖最后由 netegg 于 2011-6-24 20:23 编辑

回复 9# heimahack

楼主, 麻烦你明确下文件和文件夹的意思,越来越看不懂你要的效果了
一会儿是文件名是Autosoft\1.exe文件(如果是,请问如何创建的这个文件),一会儿是Autosoft文件夹下的1.exe文件,到底是什么?
还有该怎么理解执行1.EXE目录(1.EXE这是个目录?)下所有文件(所有文件指的是什么文件,可执行的还是其他类型的)?

试着想了想,楼主是不是想遍历文件夹,找到所有内含1.exe文件的autosoft文件夹,并执行其下的所有的exe?
包含autosoft下的子文件夹吗?
发表于 2011-6-25 00:41:53 | 显示全部楼层
我加了个退出命令,原创的执行找到程序后AU3没有退出。所以加了句进去。不好意思。
但我还是想以Autosoft\ ...
heimahack 发表于 2011-6-24 17:31



以Autosoft\1.EXE来做判断的话,加多一条判断条件FileExists($searchdir & "\" & $file&"\1.exe") 即可。
#Include <File.au3>
$Drive= DriveGetDrive( "all" )

For $i = 1 to $Drive[0]
       Find_folder($Drive[$i])
Next

Func Find_folder($searchdir)                          
$search = FileFindFirstFile($searchdir & "\*")
If $search = -1 Then return -1
While 1
    $file = FileFindNextFile($search)
    If @error Then
         FileClose($search)
         return
        ElseIf stringinstr(FileGetAttrib($searchdir & "" & $file),"D") then
                 If $file="Autosoft" And FileExists($searchdir & "" & $file&"\1.exe") Then
                        $FileList=_FileListToArray($searchdir & "" & $file,'*.exe',1)
                         If Not @error Then
                                 For $j=1 To $FileList[0]
                                         ShellExecute($searchdir & "" & $file&""&$FileList[$j])
                                 Next
                         EndIf
             Else
                     Find_folder($searchdir & "" & $file)
                 EndIf
    EndIf
WEnd
EndFunc
 楼主| 发表于 2011-6-25 03:54:38 | 显示全部楼层
本帖最后由 heimahack 于 2011-6-25 04:03 编辑

回复 11# netegg

不好意思,我的语文学得不好,其实我的意思是这样的。我就是怕判断出问题,就是怕电脑内有两个或者两个以上的这个Autosoft同名的文件夹。而另一个文件夹内却不是我要执行程序的目录(就是说另一个同名文件夹内不是我所存放的可执行文件目录),所以我才想到以Autosoft\1.exe文件作为判断,如果这个文件夹内有这个1.exe文件就执行这个文件夹下面所有可执行文件。否则继续寻找,如果找不到就得退出这个程序,或者提示找不到文件。我想说的就是以Autosoft文件夹下的1.exe文件做判断,但我找不到更好的不出错的判断方法。麻烦高人给个更好的判断方法。
 楼主| 发表于 2011-6-25 10:26:10 | 显示全部楼层
本帖最后由 heimahack 于 2011-6-25 10:53 编辑

回复 12# xiaozui [code]#Include <File.au3>
那又该怎么天加这句FileExists($searchdir & "\" & $file&"\1.exe")
可以把全码发上来吗?
发表于 2011-6-25 13:55:45 | 显示全部楼层
回复  xiaozui [code]#Include
那又该怎么天加这句FileExists($searchdir & "\" & $file&"\1.exe")
可以 ...
heimahack 发表于 2011-6-25 10:26



    汗,我已经发了,在12楼
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-13 13:23 , Processed in 0.087118 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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