heimahack 发表于 2011-6-23 22:35:32

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

本帖最后由 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写了一个,没测试,可能会有问题。哈哈。上班了,基本思路就是这样。。。

cls822001 发表于 2011-6-24 08:08:24

这个很明显是想写病毒的............

heimahack 发表于 2011-6-24 09:51:39

本帖最后由 heimahack 于 2011-6-24 09:54 编辑

不是写病毒, 我是做系统安装版定制,需要在T13时运行目录下的文件,但光盘安装的时候这个目录是在光盘下面I138文件夹下,而在PE下用虚拟光驱来安装时,这个目录会复制到硬盘上,在C:\WINDOWS\下面。所以得找个这样的程序。还有, 谢谢楼上的代码,可是不成功

xiaozui 发表于 2011-6-24 12:10:52

#Include <File.au3>
$Drive= DriveGetDrive( "all" )

For $i = 1 to $Drive
       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
                                       ShellExecute($searchdir & "\" & $file&"\"&$FileList[$j])
                               Next
                       EndIf
             Else
                     Find_folder($searchdir & "\" & $file)
               EndIf
    EndIf
WEnd
EndFunc

虫子樱桃 发表于 2011-6-24 12:31:49

回复 4# heimahack


    额,函数调用没呢???

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文件,这又该怎么做呢?

netegg 发表于 2011-6-24 16:41:36

楼主试着自己加些条件就行了,大框架就是上面的代码了

heimahack 发表于 2011-6-24 17:31:35

#Include <File.au3>
$Drive= DriveGetDrive( "all" )
For $i = 1 to $Drive
       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
                                       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这一行下面加这样一个判断试试。偶是菜鸟,不知道正确不正确、、、、、

netegg 发表于 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下的子文件夹吗?

xiaozui 发表于 2011-6-25 00:41:53

我加了个退出命令,原创的执行找到程序后AU3没有退出。所以加了句进去。不好意思。
但我还是想以Autosoft\ ...
heimahack 发表于 2011-6-24 17:31 http://www.autoitx.com/images/common/back.gif


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

For $i = 1 to $Drive
       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
                                       ShellExecute($searchdir & "\" & $file&"\"&$FileList[$j])
                                 Next
                         EndIf
             Else
                     Find_folder($searchdir & "\" & $file)
               EndIf
    EndIf
WEnd
EndFunc

heimahack 发表于 2011-6-25 03:54:38

本帖最后由 heimahack 于 2011-6-25 04:03 编辑

回复 11# netegg

不好意思,我的语文学得不好,其实我的意思是这样的。我就是怕判断出问题,就是怕电脑内有两个或者两个以上的这个Autosoft同名的文件夹。而另一个文件夹内却不是我要执行程序的目录(就是说另一个同名文件夹内不是我所存放的可执行文件目录),所以我才想到以Autosoft\1.exe文件作为判断,如果这个文件夹内有这个1.exe文件就执行这个文件夹下面所有可执行文件。否则继续寻找,如果找不到就得退出这个程序,或者提示找不到文件。我想说的就是以Autosoft文件夹下的1.exe文件做判断,但我找不到更好的不出错的判断方法。麻烦高人给个更好的判断方法。

heimahack 发表于 2011-6-25 10:26:10

本帖最后由 heimahack 于 2011-6-25 10:53 编辑

回复 12# xiaozui #Include <File.au3>
那又该怎么天加这句FileExists($searchdir & "\" & $file&"\1.exe")
可以把全码发上来吗?

xiaozui 发表于 2011-6-25 13:55:45

回复xiaozui #Include
那又该怎么天加这句FileExists($searchdir & "\" & $file&"\1.exe")
可以 ...
heimahack 发表于 2011-6-25 10:26 http://www.autoitx.com/images/common/back.gif


    汗,我已经发了,在12楼
页: [1] 2
查看完整版本: 遍历所有目录找到文件夹,并执行此文件夹下所有EXE程序的AU3脚本。