可同时选择多个文件夹及文件并进行复制操作的AU3代码怎么写?
本帖最后由 xiaozui 于 2010-5-22 00:07 编辑请问,怎么实现打开一个选择对话框,可以同时选择多个文件夹及文件,并进行复制操作呢?比如说,我要把桌面上的123文件夹和a.txt、b.txt文件同时选择,并且把它们复制到d:\123目录下,具体代码怎么写呢?先谢谢咯 :face (30):没人愿意帮忙吗? 高手帮帮忙嘛,小弟感激不尽。。。 最简单的,FileOpenDialog支持多文件(夹)选择。 简单说,把问题分开想,多个文件复制其实就是复制操作执行多次,关键在于你怎么选,而不在于怎么复制 请问,怎么实现打开一个选择对话框,可以同时选择多个文件夹及文件,并进行复制操作呢?比如说,我要把桌面 ...
xiaozui 发表于 2010-5-19 14:35 http://www.autoitx.com/images/common/back.gif
“打开一个选择对话框,可以同时选择多个文件夹及文件”
好象同时选中文件夹和文件有点麻烦,FileOpenDialog 只能同时选中多文件,而FileSelectFolder 又只能同时选文件夹,并不能选择文件。 本帖最后由 netegg 于 2010-5-20 11:34 编辑
选取的不管是文件夹还是文件存成数组,对数组元素进行判断,如果是文件夹,按文件夹操作,如果是文件按文件操作,判断用if filegetattribe("")= "D" then
如果还是有问题,参考udf区的枚举文件,把里面的操作命令按自己要求修改下 选取的不管是文件夹还是文件存成数组,对数组元素进行判断,如果是文件夹,按文件夹操作,如果是文件按文件 ...
netegg 发表于 2010-5-20 11:31 http://www.autoitx.com/images/common/back.gif
关键是我不知怎么在一个选择窗口中做到同时支持选择文件和文件夹。FileOpenDialog 只能同时选中多文件,而FileSelectFolder 又只能同时选文件夹,并不能选择文件。 在一个选择窗口中做到同时支持选择文件和文件夹
个人所知是比较困难的
可否用灵活一点的方法实现
例如以下GUI显示的
#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: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:21 编辑
上个运行图吧,列表框内支持鼠标框选,和Ctrl+鼠标多选
本帖最后由 C.L 于 2010-5-24 16:05 编辑
今天有空,做了个复制文件的小工具,放到这里(因为LZ这个标题很利于搜索,便于日后自已使用 :-) )
支持鼠标框选,文件夹和文件可同时选中,有正在复制文件名、进度条显示,可选择复制到目的文件夹。
上两个图就比较清楚了
代码下载:
回复 13# C.L
感谢并学习,真的很感谢! 好东西。。 值得学习一下。。。。。。。。