xiaozui 发表于 2010-5-19 14:35:07

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

本帖最后由 xiaozui 于 2010-5-22 00:07 编辑

请问,怎么实现打开一个选择对话框,可以同时选择多个文件夹及文件,并进行复制操作呢?比如说,我要把桌面上的123文件夹和a.txt、b.txt文件同时选择,并且把它们复制到d:\123目录下,具体代码怎么写呢?先谢谢咯

xiaozui 发表于 2010-5-19 21:31:47

:face (30):没人愿意帮忙吗?

xiaozui 发表于 2010-5-20 01:12:42

高手帮帮忙嘛,小弟感激不尽。。。

sensel 发表于 2010-5-20 01:31:24

最简单的,FileOpenDialog支持多文件(夹)选择。

netegg 发表于 2010-5-20 02:35:15

简单说,把问题分开想,多个文件复制其实就是复制操作执行多次,关键在于你怎么选,而不在于怎么复制

C.L 发表于 2010-5-20 11:19:21

请问,怎么实现打开一个选择对话框,可以同时选择多个文件夹及文件,并进行复制操作呢?比如说,我要把桌面 ...
xiaozui 发表于 2010-5-19 14:35 http://www.autoitx.com/images/common/back.gif

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

netegg 发表于 2010-5-20 11:31:36

本帖最后由 netegg 于 2010-5-20 11:34 编辑

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

xiaozui 发表于 2010-5-21 09:37:53

选取的不管是文件夹还是文件存成数组,对数组元素进行判断,如果是文件夹,按文件夹操作,如果是文件按文件 ...
netegg 发表于 2010-5-20 11:31 http://www.autoitx.com/images/common/back.gif


    关键是我不知怎么在一个选择窗口中做到同时支持选择文件和文件夹。FileOpenDialog 只能同时选中多文件,而FileSelectFolder 又只能同时选文件夹,并不能选择文件。

lynfr8 发表于 2010-5-21 12:27:32

在一个选择窗口中做到同时支持选择文件和文件夹
个人所知是比较困难的
可否用灵活一点的方法实现
例如以下GUI显示的

lanfengc 发表于 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 Then
                  $sError = _WinAPI_CommDlgExtendedError()
                  MemoWrite("CommDlgExtendedError (" & @error & "): " & $sError)
                Else
                  For $x = 1 To $aFile
                                                If $aFile<>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 本人不才, 只做到了选取多个文件, 没做到选文件夹。

C.L 发表于 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
                $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

C.L 发表于 2010-5-24 01:19:48

本帖最后由 C.L 于 2010-5-24 01:21 编辑

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

C.L 发表于 2010-5-24 16:02:44

本帖最后由 C.L 于 2010-5-24 16:05 编辑

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


代码下载:

newuser 发表于 2010-5-24 16:28:00

回复 13# C.L
感谢并学习,真的很感谢!

zhenglei 发表于 2010-5-25 12:10:21

好东西。。 值得学习一下。。。。。。。。
页: [1] 2 3
查看完整版本: 可同时选择多个文件夹及文件并进行复制操作的AU3代码怎么写?