# FileCopyDir

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

    FileCopyDir, Source, Dest , Overwrite

## 参数

Source

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

Dest

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

Overwrite

  此参数确定是否覆盖已存在的文件. 如果省略, 它默认为 0(false). 指定以下值之一:

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

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

  此参数可以为表达式, 甚至是计算结果为真或假的表达式(因为真和假内部分别保存为 1 和 0).

## 错误处理

[v1.1.04+]: 此命令失败时会抛出异常. 想了解更多信息, 请参阅运行时错误.

如果遇到问题则 ErrorLevel 被置为 1, 否则为 0. 但是, 如果源目录包含任何由 PageName.htm 文件和名称为 PageName_files 的相应目录组成的网页, 那么即使复制成功也可能提示错误.

## 备注

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

由于操作会递归复制文件夹及其所有子文件夹和文件, 所以复制某个文件夹到目标内部的什么位置是不确定的. 要变通解决此问题, 首先把它复制到目标外面, 然后使用 FileMoveDir 把这个副本移动到目标位置.

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

## 相关

FileMoveDir, FileCopy, FileMove, FileDelete, 文件循环, FileSelectFolder, SplitPath

## 示例

将一个目录复制到一个新的位置.

    FileCopyDir, C:\My Folder, C:\Copy of My Folder

提示用户复制一个文件夹.

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

dftg