DirCopy

复制文件夹, 及其所有子文件夹和文件(类似于 xcopy) 或归档文件(如ZIP) 的全部内容.

DirCopy Source, Dest , Overwrite

参数

Source

类型: 字符串

源目录的名称(不含末尾的反斜杠), 如果未指定绝对路径, 则假定在 A_WorkingDir 中. 例如: C:\My Folder

如果操作系统支持, Source 也可以是归档文件的路径, 在这种情况下, 其内容将被复制到目标目录. 总是支持 ZIP 文件. TAR 文件至少需要 Windows 10 (1803) build 17063. RAR, 7z, gz 和其他至少需要 Windows 11 23H2(使用了 libarchive, 其中列出了所有支持的格式).

Dest

类型: 字符串

目标目录的名称(不含末尾的反斜杠), 如果未指定绝对路径, 则假定在 A_WorkingDir 中. 例如: C:\Copy of My Folder

Overwrite

类型: 整数

如果省略, 则默认为 0. 否则, 指定下列数字之一, 指示是否覆盖已存在的文件:

0: 不覆盖现有的文件. 如果已经存在以 Dest 为名称的文件或目录, 则操作会失败并且没有任何效果.

1: 覆盖现在的文件. 但是, 不会删除在 Dest 中没有被 Source 目录中文件覆盖的其他子目录或文件.

其他值保留供将来使用.

错误处理

如果发生错误, 则抛出异常.

但是, 如果源目录包含任何由 PageName.htm 的文件和相应的名称为 PageName_files 的目录组成的保存的网页, 那么即使复制成功也可能抛出异常.

备注

如果目标目录的结构不存在, 则可行时会进行创建.

由于该操作将以递归方式复制文件夹及其所有子文件夹和文件, 因此将文件夹复制到自身内部某个位置的结果是不确定的. 要解决此问题, 请先将其复制到自身外部, 然后使用 DirMove 将其复制移动到所需位置.

DirCopy 只复制单个文件夹. 若要复制文件夹中的内容(它的所有文件和子文件夹, 而不复制文件夹本身), 请参阅 FileCopy 的示例部分.

DirMove, FileCopy, FileMove, FileDelete, 文件循环, DirSelect, SplitPath

示例

复制目录到新位置.

DirCopy "C:\My Folder", "C:\Copy of My Folder"

提示用户复制文件夹.

SourceFolder := DirSelect(, 3, "Select the folder to copy")
if SourceFolder = ""
    return
; 否则继续.
TargetFolder := DirSelect(, 3, "Select the folder IN WHICH to create the duplicate folder.")
if TargetFolder = ""
    return
; 否则继续.
Result := MsgBox("A copy of the folder '" SourceFolder "' will be put into '" TargetFolder "'. Continue?",, 4)
if Result = "No"
    return
SplitPath SourceFolder, &SourceFolderName  ; 仅从它的完整路径中提取文件夹名称.
try
    DirCopy SourceFolder, TargetFolder "\" SourceFolderName
catch
    MsgBox "The folder could not be copied, perhaps because a folder of that name already exists in '" TargetFolder "'."
return