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
程序有点长,其他的都不是很有用,就中间我标明了程序开始和到哪里结束那里请你帮忙看看,谢谢