# DirCopy

复制文件夹, 及其所有子文件夹和文件(类似于 xcopy).

    DirCopy Source, Dest , Overwrite

## 参数

Source

  类型: 字符串

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

  如果操作系统支持, Source 也可以是 zip 文件的路径, 将其内容复制到目标目录. 这已经被证实可以在 Windows 7 和 Windows 11 上工作.

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

dftg