复制一个或多个文件.
FileCopy, SourcePattern, DestPattern , Overwrite
单个文件或文件夹的名称或者通配符模式, 例如 C:\Temp\*.tmp
. 如果未指定绝对路径, 则假定 SourcePattern 在 %A_WorkingDir% 中.
目标的名称或模式, 如果未指定绝对路径, 则假定在 %A_WorkingDir% 中.
如果星号存在, 则将文件名中的第一个星号(*
) 替换为不包含其扩展名的源文件名, 而将最后一个句号(.
) 后的第一个星号替换为源文件的扩展名. 如果有星号, 但省略了扩展名, 则使用源文件的扩展名.
要执行简单地复制 -- 保留原来的文件名 -- 只需指定文件夹名, 如下面几乎等同的两个例子所示:
FileCopy, C:\*.txt, C:\My Folder
FileCopy, C:\*.txt, C:\My Folder\*.*
目标目录必须已经存在. 如果 My Folder 不存在, 上面的第一个示例将使用 "My Folder" 作为目标文件名, 而第二个示例将不复制任何文件.
如果为空或省略, 则默认为 0. 否则, 请指定以下数字之一, 来指示是否覆盖已存在的文件:
0: 不覆盖现有文件. 如果 DestPattern 已作为文件或目录存在, 则操作将失败且没有效果.
1: 覆盖现有文件. 但是, DestPattern 中的任何在 SourcePattern 中没有对应文件的文件或子文件夹将不会被删除.
参数可以是表达式, 甚至可以是计算结果为 1, 0 或空字符串的表达式.
[v1.1.04+]: 此命令失败时会抛出异常. 想了解更多信息, 请参阅运行时错误.
ErrorLevel 被设置为由于错误而无法复制的文件数, 否则为 0.
在这两种情况中, 如果源文件为单个文件(没有通配符) 且此文件不存在, 则 ErrorLevel 被置为 0. 要判断这种情况, 请在复制前对源文件使用 FileExist() 或 IfExist.
与 FileMove 不同, 复制一个文件来覆盖它自己总是会导致错误, 即使在改写模式生效的情况下.
如果找到了文件, 则 A_LastError 会被设置为 0(零) 或最近一次操作失败时调用操作系统 GetLastError() 函数的结果. 否则 A_LastError 包含了没有找到文件原因的错误码.
FileCopy 只复制文件. 若要复制文件夹中的内容(它的所有文件和子文件夹, 而不复制文件夹本身), 请参照下面的示例部分. 若要复制单个文件夹(及其子文件夹), 请使用 FileCopyDir.
在遇到错误后操作仍会继续进行.
FileMove, FileCopyDir, FileMoveDir, FileDelete
ErrorCount := CopyFilesAndFolders("C:\My Folder\*.*", "D:\Folder to receive all files & folders") if (ErrorCount != 0) MsgBox %ErrorCount% files/folders could not be copied. CopyFilesAndFolders(SourcePattern, DestinationFolder, DoOverwrite = false) ; 复制匹配 SourcePattern 的所有文件和文件夹到 DestinationFolder 文件夹中且 ; 返回无法复制的文件/文件夹的数目. { ; 首先复制所有文件(不是文件夹): FileCopy, %SourcePattern%, %DestinationFolder%, %DoOverwrite% ErrorCount := ErrorLevel ; 现在复制所有文件夹: Loop, %SourcePattern%, 2 ; 2 表示 "只获取文件夹". { FileCopyDir, %A_LoopFileFullPath%, %DestinationFolder%\%A_LoopFileName%, %DoOverwrite% ErrorCount += ErrorLevel if ErrorLevel ; 报告每个出现问题的文件夹名称. MsgBox Could not copy %A_LoopFileFullPath% into %DestinationFolder%. } return ErrorCount }