[ahk]xCopyPlus批量复制某类文件

188 篇文章 3 订阅
57 篇文章 1 订阅
;作者:sunwind
;2015年10月27日22:34:33
;功能:
;xcopy的增强版,可以过滤扩展名
;xCopyPlus批量复制某类文件

Gui,+AlwaysOnTop
Gui, Add, Text,,源路径(拖放或输入源目录,多条请换行)
Gui, Add, Edit, vSourceEdit  W300 R2
Gui, Add, Text,,目的路径(拖放或输入目的目录,只支持一条)
Gui, Add, Edit, vDestinationEdit  W300 R2
Gui, Add, Text,,文件类型(多个类型请用|符号分割))
Gui, Add, Edit, vFileType  W300,rar|zip
Gui,Add,Button,gFilterCopy,复制文件(及文件夹结构)
Gui,Add,Button,gStructureCopy,仅复制文件夹结构
Options:="W520 H240"
Title:="带文件夹结构复制某类型文件"

Gui, Show , %Options%, %Title%
return
GuiDropFiles:  ; 对拖放提供支持.

 SelectedFileName := A_GuiEvent

;获取鼠标下面的控件
MouseGetPos, , , id, control
WinGetClass, class, ahk_id %id%
if (control="Edit1")
{
    GuiControl,, SourceEdit, %SelectedFileName%  ; 在控件中显示文本.
}
if (control="Edit2")
{
    GuiControl,, DestinationEdit, %SelectedFileName%  ; 在控件中显示文本.
}
return

FilterCopy:
Gui,-AlwaysOnTop
ControlGetText,SourcePath,Edit1
ControlGetText,DestinationPath,Edit2
ControlGetText,myext,Edit3
tar_ext=i).(%myext%)$    ;定义你的文件类型

response:=
Loop, parse, SourcePath, `n, `r  ; 在 `r 之前指定 `n, 这样可以同时支持对 Windows 和 Unix 文件的解析.
{
    SourceFolder:=Trim(A_LoopField, OmitChars ="`n")
    SourceFolder :=   RTrim(SourceFolder,"\")
    DestinationFolder :=   RTrim(DestinationPath,"\") ;remove a trailing backslash, if present
    
    if not InStr(FileExist(SourceFolder), "D")
        {
            MsgBox 不存在源路径
        }
        
    if  not InStr(FileExist(DestinationFolder), "D")
        {
            FileCreateDir,%DestinationFolder%
            MsgBox 创建了【%DestinationFolder%】目录
        }
        
        response .= FilterCopy(SourceFolder,DestinationFolder,tar_ext)  . "`n"

}
MsgBox %myext%文件复制完成!`n%response%
Run %DestinationFolder%
return



StructureCopy:
Gui,-AlwaysOnTop
ControlGetText,SourcePath,Edit1
ControlGetText,DestinationPath,Edit2

DestinationFolder :=   RTrim(DestinationPath,"\") ;remove a trailing backslash, if present

if  not InStr(FileExist(DestinationFolder), "D")
    {
        FileCreateDir,%DestinationFolder%
    }

arr:=StrSplit(SourcePath,"`r`n")
res:=
for key,SourcePath in arr
{
    SourceFolder :=   RTrim(SourcePath,"\")
    if not InStr(FileExist(SourceFolder), "D")
        {
            MsgBox 不存在源路径
        }

    res.=StructureCopy(SourceFolder,DestinationFolder)
}
MsgBox  文件夹结构复制完成`n%res% ;输出结果
Run %DestinationFolder%
return



Escape:
GuiClose:  ; 用户关闭了窗口.
ExitApp

StructureCopy(fromdir,todir)
{
    t:=
    Loop,%fromdir%\*.*,2,1  ;2只是文件夹
    {
        t.=A_LoopFileFullPath . "`n"
        SplitPath,fromdir,,fatherDir
        StringReplace,DirName,A_LoopFileFullPath,%fatherDir%,%todir%,all
        FileCreateDir, %DirName%
    }
StringReplace,out,t,%fatherDir%,%todir%,all
return %out%
}

FilterCopy(fromdir,todir,tar_ext)
{
    StructureCopy(fromdir,todir)
    t:=
    Loop,%fromdir%\*.*,1,1 ; 第一个参数1获取所有匹配通配符模式的文件和文件夹.
    {
        If (! RegExMatch(A_LoopFileFullPath, tar_ext))  ;在此过滤
            continue
        t.=A_LoopFileFullPath . "`n"
        SplitPath,fromdir,,fatherDir
        StringReplace,DirName,A_LoopFileFullPath,%fatherDir%,%todir%,all
        FileCopy,%A_LoopFileFullPath%,%DirName%
    }
StringReplace,out,t,%fatherDir%,%todir%,all
return %out%
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值