# FileCopyDir

复制一个文件夹连同它的所有文件和子文件夹(和 xcopy 相似)。

FileCopyDir, Source, Dest [, Flag]

#### 参数

Source | 源目录的名称(末尾不带反斜线)，如果绝对路径未指定将被假设在 %A_WorkingDir% 。例如：C:\My Folder
Dest | 目标目录的名称(末尾不带反斜线)，如果绝对路径未指定将被假设在 %A_WorkingDir% 。 例如：C:\Copy of My Folder
Flag | (可选)此 flag(标记) 决定是否覆盖已经存在的文件： 0 (默认): 不覆盖存在的文件。如果 Dest 有一个文件或目录存在，复制操作将不生效并失败。 1: 覆盖存在的文件。不过，任何 Dest 中的文件或子文件夹没在 Source 有对应的将不会被删除。 此参数可以是一个 expression(表 达式) 甚至是一个算得的 true(真) 或 false(假) (因为真或假在内部被存为 1 和 0 )。

#### ErrorLevel

如果发生了一个问题 ErrorLevel 会被设为 1 ，此外为 0 。
但是，如果源目录包含网页组成的 PageName.htm 和相应的 PageName_files 目录时，即使成功，也会返回 1。

#### 注意

如果目标目录结构不存在，可能的话它将被创建。

由于操作将 recursively(递归地) 复制一个文件夹连同它的所有文件和子文件夹，所以复制一个文件夹到它自身内部的某处目 的地的结果未被定义。要绕弯解决这种情况，先复制它到它自身外部的一个目的地，然后使用 FileMoveDir 来移动复制的文件夹到需要的位置。

FileCopyDir 复制单个文件夹。要代替它复制一个文件夹的内容(它的所有文件和子文件夹)，请看 FileCopy 的示例部分。

#### 相关命令

FileMoveDir, FileCopy, FileMove, FileDelete, file-loops, FileSelectFolder, SplitPath

#### 示例

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

    ; 例子 #2: 一个运行的脚本提示你去复制一个文件夹。
    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 文件夹没能复制，也许因为在 "%TargetFolder%" 里已经存在同名文件夹。
    return

翻译：天堂之门 menk33@163.com 2008年8月7日