afan 发表于 2009-7-29 15:51:41

呵呵,你都不知道哪里变了我还能知道吗,呵呵
其实删除可以调用Dos命令,Windows下面删除太慢了,Dos下面快N倍,特别是几千上万的文件及目录更明显

xavier880819 发表于 2009-7-29 17:02:54

呵呵,我知道为什么了,是因为在目标文件夹没有选择的情况下删除就会出现那种情况了。

对了,你说的再Dos下面删除又是怎么一回事呢??我觉得在windows下面删除,直接删除文件夹确实比较慢,但是如果删除有文件的文件夹就快很多了。

afan 发表于 2009-7-29 19:32:41

#include <Process.au3>
_RunDOS ( $sCommand );$sCommand 为一个 DOS 命令.比如 'rd F /s /q'

xavier880819 发表于 2009-7-30 09:22:27

63# afan


嘿嘿,只要是新方法我就愿意去尝试一下。谢谢你!

xavier880819 发表于 2009-8-5 13:41:12

请教一下afan

如果说我复制的文件夹里面的文件,我需要设定成只复制某一种格式的文件,需要用什么做到呢?

afan 发表于 2009-8-5 14:38:34

那就需要一个搜索的前奏了,如果文件较多,那就先遍历搜索需要的文件到一临时文件,一行一个路径。
之后在复制时加一个循环,FileReadLine 逐行读取源文件并复制到目标文件夹。

xavier880819 发表于 2009-8-5 17:59:42

66# afan


不是很明白,可不可以有个小例子?这样比较容易理解点,谢谢

afan 发表于 2009-8-5 19:06:55

写了一段,这个例子就是搜索 E:\music 下面(含子目录)的mp3文件,复制到 C:\1 里面。
#include <File.au3>
$sslj = 'E:\Music'
$fh = FileOpen(@ScriptDir & "\1.txt", 1)
_filelist($sslj, '.mp3')
FileClose($fh)

$fh = FileOpen(@ScriptDir & "\1.txt", 0)
While 1
        $rl = FileReadLine($fh)
        If @error = -1 Then ExitLoop
        FileCopy($rl, 'c:\1\', 9)
WEnd
FileClose($fh)
FileDelete(@ScriptDir & "\1.txt")

Func _filelist($searchdir,$hzm)
        $search = FileFindFirstFile($searchdir & "\*")
        If $search = -1 Then Return -1
        While 1
                $file = FileFindNextFile($search)
                If @error Then
                        FileClose($search)
                        Return
                ElseIf $file = "." Or $file = ".." Then
                        ContinueLoop
                ElseIf StringInStr(FileGetAttrib($searchdir & "\" & $file), "D") Then
                        _filelist($searchdir & "\" & $file, $hzm)
                        ContinueLoop
                EndIf
                If StringRight($file, 4) = $hzm Then
                        FileWriteLine($fh, $searchdir & "\" & $file)
                EndIf
        WEnd
EndFunc   ;==>_filelist

xavier880819 发表于 2009-8-6 09:29:36

68# afan


谢谢你的帮助,我大致觉得可以明白和加以修改成自己所需要的。

lianwang 发表于 2009-8-7 07:49:00

这些东西是很好玩,只是好多东西我还在学习中,好想能好好运用!

xavier880819 发表于 2009-8-7 17:23:12

请问afan,

AutoIT里面有没有enable和disable的控制功能啊?就是按了那个按键,某一个功能就可以或者不能使用了。

afan 发表于 2009-8-7 17:42:21

GUICtrlSetState ( 控件ID, 状态 )
状态:
$GUI_ENABLE 控件将可用.
$GUI_DISABLE 控件将变成灰色状态(不可用)

iftodo 发表于 2009-8-7 22:19:06

....    这个FOR啊,看的头大了

xavier880819 发表于 2009-8-11 15:25:02

afan,上次你教了我怎么设定一个限制去读取然后复制制定格式的文件,但是我对于那个Func_filelist看得不是很懂,所以在尝试往自己的程序里面添加的时候失败。

我的程序是还是那个创建文件夹和复制文件的程序,但是我尝试了,在func里面就不能够再加func来运行了,那么怎么把Func_filelist加进去呢?

$Form1 = GUICreate('Multi-Level Folder Creator', 387,265,-1,-1)
Dim $n = 1, $l, $s
For $n = 1 To 14
      $l[$n] = GUICtrlCreateLabel("Lv" & $n, 12 + 70 * ($n - (Int(($n - 1) / 5)) * 5 - 1), 20 + 20 * (Int(($n - 1) / 5)), 30, 18)
      $s[$n] = GUICtrlCreateInput("0", 45 + 70 * ($n - (Int(($n - 1) / 5)) * 5 - 1), 17 + 20 * (Int(($n - 1) / 5)), 30, 16, $ES_NUMBER)
      GUICtrlSetLimit(-1, 4)
                Next
$yml = GUICtrlCreateInput("", 11, 85, 240, 23)
$Button = GUICtrlCreateButton("Create Folder / Copy File", 10, 160, 220, 25)
$Button1 = GUICtrlCreateButton("Remove All", 240, 160, 135, 25)
$Button2 = GUICtrlCreateButton("Source File Folder", 255, 84, 120, 26)
$Button3 = HotKeySet("{ESC}", "Terminate")
$gml = GUICtrlCreateInput("",11,120,240,23)
$Button5 = GUICtrlCreateButton("Target Folder", 255, 119, 120, 26)
$xs = GUICtrlCreateLabel("0/0      ", 175, 220, 300, 15)
GUICtrlSetColor(-1, 0xff0000)
$jdt = GUICtrlCreateProgress(10, 200, 365, 12,$PBS_SMOOTH)
GUISetState()

While 1
      $nMsg = GUIGetMsg()
      Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        exit

                Case $Button
                        GUICtrlSetData($jdt, 0)
                        GUICtrlSetState($Button, $GUI_ENABLE)
                        Dim $ywc = 0, $zs = 0, $sc = 1,$f,$h
                        jc()
                        AdlibEnable("jdt")
                        If GUICtrlRead($s) = 0 then
                              msgbox(16, 'Error', 'Please set the number of folders')
                                                        Else
                                                                $f=MsgBox(1+48,'Attention','You will create ' & $zs & ' folders.' &@CRLF& 'Do you wish to continue?')
                                                                Select
                                                                        Case $f=1
                                       scml()
                                                                           sleep(300)
                                       AdlibDisable()
                                       msgbox(64, 'Finish', 'Created' & $zs & 'Folders! ')
                                                                   Case $f=2
                                                                           ContinueLoop
                                                                   EndSelect
                                                                                       
                                                                  EndIf
                                                                  GUICtrlSetState($Button,$GUI_ENABLE)
                                                       
                                                Case $Button1
                                        $h=MsgBox(1+48,'Attention','Are you sure you want to Delete all the folders ?')
                                        Select
                                                Case $h=1
                                             Del()
                                             sleep(300)
                                               msgbox(64, 'Finish', 'You have deleted all the folders! ')
                                          Case $h=2
                                                ContinueLoop
                                                EndSelect
                                Case $Button2
                        $ywjj = FileSelectFolder("Choose The Folder", "", 4)
                        If @error Then ContinueLoop
                        GUICtrlSetData($yml, $ywjj)
                                        Case $Button3
                                        Terminate()
                                Case $Button5
                                        $ywxx = FileSelectFolder("Choose The Folder", "", 4)
                                        If @error Then ContinueLoop
                        GUICtrlSetData($gml, $ywxx)
                                       
      EndSwitch
WEnd

Func Del()
        Dim $num
        For $num = 1 To 1000
        $gmld = GUICtrlRead($gml)       
        DirRemove($gmld & '\' & 'MP3-'&$num,1)
        Next
       
        EndFunc
       
Func jc()
      For $i = 14 To 1 Step -1
                $sl = GUICtrlRead($s[$i])
                If $sl > 0 then
                        For $i1 = 1 To $i
                              $sl1 = GUICtrlRead($s[$i1])
                              If $sl1 = 0 then
                                        GUICtrlSetData($s[$i1], 1)
                                        $sl1 = 1
                              endif
                              $zs = $zs + ($sc * $sl1)
                              $sc = $sc * $sl1
                        Next
                        ExitLoop
                Endif
      Next
EndFunc   ;==>jc

Func Terminate()
   Exit 0
EndFunc
Func scml()
          $ymlr = GUICtrlRead($yml)
                $gmlr = GUICtrlRead($gml)
      $sl1 = GUICtrlRead($s)
                If $gmlr = '' Then $gmlr = @ScriptDir
      For $i1 = 1 To $sl1
                $fn1 = 'MP3-'
                $xml1 = $gmlr&'\'&$fn1&$i1
                DirCreate($xml1)
$fh = FileOpen(@ScriptDir & "\1.txt", 1) ;从这里是复制文件的程序
_filelist($$ymlr, '.mp3')
FileClose($fh)

$fh = FileOpen(@ScriptDir & "\1.txt", 0)
While 1
      $rl = FileReadLine($fh)
      If @error = -1 Then ExitLoop
      FileCopy($rl, $gmlr, 9)
WEnd
FileClose($fh)
FileDelete(@ScriptDir & "\1.txt") ; 到这里为止
                $ywc = $ywc + 1
Next
Endfunc   ;==>scml

Func jdt()
      GUICtrlSetData($jdt, $ywc / $zs * 100)
      GUICtrlSetData($xs, $ywc & '/' & $zs)
        EndFunc   ;==>jdt

这里我就弄了一层创建文件夹和复制文件,但是我就不明白在func scml()下面 又怎么可以添加你的Func_filelist进去呢??而且这个复制文件的命令又不能放在前面的while 1 loop里面。我感觉有点乱

xavier880819 发表于 2009-8-11 15:32:29

程序有点长,其他的都不是很有用,就中间我标明了程序开始和到哪里结束那里请你帮忙看看,谢谢
页: 1 2 3 4 [5] 6 7 8 9
查看完整版本: 使用autoIT调用bat文件的问题