找回密码
 加入
搜索
查看: 18935|回复: 44

可同时选择多个文件夹及文件并进行复制操作的AU3代码怎么写?

 火... [复制链接]
发表于 2010-5-19 14:35:07 | 显示全部楼层 |阅读模式
本帖最后由 xiaozui 于 2010-5-22 00:07 编辑

请问,怎么实现打开一个选择对话框,可以同时选择多个文件夹及文件,并进行复制操作呢?比如说,我要把桌面上的123文件夹和a.txt、b.txt文件同时选择,并且把它们复制到d:\123目录下,具体代码怎么写呢?先谢谢咯
 楼主| 发表于 2010-5-19 21:31:47 | 显示全部楼层
没人愿意帮忙吗?
 楼主| 发表于 2010-5-20 01:12:42 | 显示全部楼层
高手帮帮忙嘛,小弟感激不尽。。。
发表于 2010-5-20 01:31:24 | 显示全部楼层
最简单的,FileOpenDialog支持多文件(夹)选择。

评分

参与人数 1金钱 +10 收起 理由
xiaozui + 10 谢谢帮忙!

查看全部评分

发表于 2010-5-20 02:35:15 | 显示全部楼层
简单说,把问题分开想,多个文件复制其实就是复制操作执行多次,关键在于你怎么选,而不在于怎么复制
发表于 2010-5-20 11:19:21 | 显示全部楼层
请问,怎么实现打开一个选择对话框,可以同时选择多个文件夹及文件,并进行复制操作呢?比如说,我要把桌面 ...
xiaozui 发表于 2010-5-19 14:35


“打开一个选择对话框,可以同时选择多个文件夹及文件”
好象同时选中文件夹和文件有点麻烦,FileOpenDialog 只能同时选中多文件,而FileSelectFolder 又只能同时选文件夹,并不能选择文件。

评分

参与人数 1金钱 +10 收起 理由
xiaozui + 10 谢谢帮忙!

查看全部评分

发表于 2010-5-20 11:31:36 | 显示全部楼层
本帖最后由 netegg 于 2010-5-20 11:34 编辑

选取的不管是文件夹还是文件存成数组,对数组元素进行判断,如果是文件夹,按文件夹操作,如果是文件按文件操作,判断用if filegetattribe("")= "D" then
如果还是有问题,参考udf区的枚举文件,把里面的操作命令按自己要求修改下

评分

参与人数 1金钱 +10 收起 理由
xiaozui + 10 谢谢帮忙!

查看全部评分

 楼主| 发表于 2010-5-21 09:37:53 | 显示全部楼层
选取的不管是文件夹还是文件存成数组,对数组元素进行判断,如果是文件夹,按文件夹操作,如果是文件按文件 ...
netegg 发表于 2010-5-20 11:31



    关键是我不知怎么在一个选择窗口中做到同时支持选择文件和文件夹。FileOpenDialog 只能同时选中多文件,而FileSelectFolder 又只能同时选文件夹,并不能选择文件。
发表于 2010-5-21 12:27:32 | 显示全部楼层
在一个选择窗口中做到同时支持选择文件和文件夹
个人所知是比较困难的
可否用灵活一点的方法实现
例如以下GUI显示的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +20 收起 理由
xiaozui + 20 谢谢,你这个折衷的方法很实用!看来也只好 ...

查看全部评分

发表于 2010-5-21 13:59:10 | 显示全部楼层
#include <StructureConstants.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
Opt('MustDeclareVars', 1)
Global $iMemo
ChooseFile()
Func ChooseFile()
    Local $hGui, $btn_dialog,$btn_quit, $aFile, $sError
    $hGui = GUICreate("选取多个文件事例", 400, 296,300,200,$WS_POPUP)
    $iMemo = GUICtrlCreateEdit("", 2, 2, 396, 260, $WS_HSCROLL)
    $btn_dialog = GUICtrlCreateButton("选择文件", 55, 270, 90, 20)
        $btn_quit = GUICtrlCreateButton("退出", 255, 270, 90, 20)
    GUISetState()
    While 1
        Switch GUIGetMsg()
            Case $btn_dialog
                $aFile = _WinAPI_GetOpenFileName("选择文件", _
                        "文本文件 (*.txt)|Au3 文件 (*.au3)|所有文件 (*.*)", ".", "", _
                        "", 2, BitOR($OFN_ALLOWMULTISELECT, $OFN_EXPLORER), $OFN_EX_NOPLACESBAR, $hGui)
                If $aFile[0] = 0 Then
                    $sError = _WinAPI_CommDlgExtendedError()
                    MemoWrite("CommDlgExtendedError (" & @error & "): " & $sError)
                Else
                    For $x = 1 To $aFile[0]
                                                If $aFile[1]<>False Then
                                                        If $x=1 Then
                                                            MemoWrite("文件所在的目录:"&$aFile[$x])
                                                    Else
                                                            MemoWrite("文件名是:"&$aFile[$x])
                                                    EndIf
                                                EndIf
                    Next
                EndIf
            Case $btn_quit
                ExitLoop
        EndSwitch
    WEnd
    GUIDelete($hGui)
EndFunc 
Func MemoWrite($sMessage)
        GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
EndFunc 
本人不才, 只做到了选取多个文件, 没做到选文件夹。

评分

参与人数 1金钱 +15 收起 理由
xiaozui + 15 谢谢帮忙!

查看全部评分

发表于 2010-5-24 01:07:34 | 显示全部楼层
本帖最后由 C.L 于 2010-5-24 01:16 编辑

今天有空看看这个问题,觉得不能同时选中文件夹和文件,还真是个问题
所以有空写了个GUI,可以同时选中文件夹和文件,方便以后可以使用,只是列表内的图标只有两种,只区分文件和文件夹,图标我懒得去搞了,好象论坛内也有专门的代码讨论图标显示的问题(补充一下,以下代码是在win7下做的,不知道和XP里的图标是否一样)
把这个代码发在这里,起个抛砖引玉的作用。
废话少说了,上代码:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
;~ #include <array.au3>
#include <file.au3>

$Form1 = GUICreate("test", 400, 380, @DesktopWidth / 2 - 100, @DesktopHeight / 2 - 100)
$aStyles = BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES)
$listview1 = GUICtrlCreateListView("名称", 0, 0, 398, 290, BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER, $LVS_REPORT))
_GUICtrlListView_SetExtendedListViewStyle($listview1, $aStyles)
_GUICtrlListView_SetView($listview1, "1")
GUICtrlSetBkColor($listview1, 0xffffff)
$button1 = GUICtrlCreateButton ("选定目标",200,330,100,30)
GUISetState(@SW_SHOW)

$curdir = FileSelectFolder ("选择目录","")
If StringRight ($curdir,1) <> "" Then $curdir &= ""
$folder = _FileListToArray($curdir, "*", 0)
If IsArray($folder) Then
        For $i=0 To $folder[0]
                $listteam = GUICtrlCreateListViewItem ($folder[$i],$listview1)
                $attrib = FileGetAttrib ($curdir&$folder[$i])
                If StringInStr($attrib, "D")  Then
                        GUICtrlSetImage($listteam, "shell32.dll", 5)
                Else
                        GUICtrlSetImage($listteam, "shell32.dll", 1)
                EndIf
        Next
        WinSetTitle ("test","","test  " & $curdir)
EndIf
While 1
        $nMsg = GUIGetMsg ()
        Switch $nMsg
                Case -3
                        Exit
                Case $button1
                        $totalnum = _GUICtrlListView_GetItemCount($listview1)
                        $selectcount = _GUICtrlListView_GetSelectedCount($listview1)
                        $out = ""
                        For $i = 0 To $totalnum-1
                                If  $selectcount Then
                                        If _GUICtrlListView_GetItemSelected($listview1, $i) == True Then
                                                $val = _GUICtrlListView_GetItemTextString($listview1, $i)
                                                $attrib = FileGetAttrib ($curdir&$val)
                                                If StringInStr($attrib, "D")  Then
                                                        $out &= $val&"   是目录"&@CRLF 
                                                Else
                                                        $out &= $val&"   是文件" & @CRLF 
                                                EndIf
                                        EndIf
                                Else
                                        $out = "没有选择文件"
                                EndIf
                        Next
                        MsgBox (0,"已选择的文件","当前的目录:"&$curdir & @CRLF & $out)
        EndSwitch        
WEnd

评分

参与人数 1金钱 +9 贡献 +1 收起 理由
lynfr8 + 9 + 1

查看全部评分

发表于 2010-5-24 01:19:48 | 显示全部楼层
本帖最后由 C.L 于 2010-5-24 01:21 编辑

上个运行图吧,列表框内支持鼠标框选,和Ctrl+鼠标多选

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-5-24 16:02:44 | 显示全部楼层
本帖最后由 C.L 于 2010-5-24 16:05 编辑

今天有空,做了个复制文件的小工具,放到这里(因为LZ这个标题很利于搜索,便于日后自已使用 :-) )
支持鼠标框选,文件夹和文件可同时选中,有正在复制文件名、进度条显示,可选择复制到目的文件夹。
上两个图就比较清楚了


代码下载:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +22 贡献 +5 收起 理由
lynfr8 + 22 + 5

查看全部评分

发表于 2010-5-24 16:28:00 | 显示全部楼层
回复 13# C.L
感谢并学习,真的很感谢!
发表于 2010-5-25 12:10:21 | 显示全部楼层
好东西。。 值得学习一下。。。。。。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-24 04:29 , Processed in 0.082340 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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