Copies a folder along with all its sub-folders and files (similar to xcopy).

DirCopy Source, Dest , Overwrite



Type: String

Name of the source directory (with no trailing backslash), which is assumed to be in A_WorkingDir if an absolute path isn't specified. For example: C:\My Folder


Type: String

Name of the destination directory (with no trailing baskslash), which is assumed to be in A_WorkingDir if an absolute path isn't specified. For example: C:\Copy of My Folder


Type: Integer (boolean)

This parameter determines whether to overwrite files if they already exist. If omitted, it defaults to 0 (false). Specify one of the following values:

0 (false): Do not overwrite existing files. The operation will fail and have no effect if Dest already exists as a file or directory.

1 (true): Overwrite existing files. However, any files or subfolders inside Dest that do not have a counterpart in Source will not be deleted.

Error Handling

An exception is thrown if an error occurs.

If the source directory contains any saved webpages consisting of a PageName.htm file and a corresponding directory named PageName_files, an exception may be thrown even when the copy is successful.


If the destination directory structure doesn't exist it will be created if possible.

Since the operation will recursively copy a folder along with all its subfolders and files, the result of copying a folder to a destination somewhere inside itself is undefined. To work around this, first copy it to a destination outside itself, then use DirMove to move that copy to the desired location.

DirCopy copies a single folder. To instead copy the contents of a folder (all its files and subfolders), see the examples section of FileCopy.


DirMove, FileCopy, FileMove, FileDelete, file-loops, DirSelect, SplitPath



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

#2: A working script that prompts you to copy a folder.

SourceFolder := DirSelect(, 3, "Select the folder to copy")
if SourceFolder = ""
; Otherwise, continue.
TargetFolder := DirSelect(, 3, "Select the folder IN WHICH to create the duplicate folder.")
if TargetFolder = ""
; Otherwise, continue.
Result := MsgBox("A copy of the folder '" SourceFolder "' will be put into '" TargetFolder "'. Continue?",, 4)
if Result = "No"
SplitPath SourceFolder, SourceFolderName  ; Extract only the folder name from its full path.
    DirCopy SourceFolder, TargetFolder "\" SourceFolderName
    MsgBox "The folder could not be copied, perhaps because a folder of that name already exists in '" TargetFolder "'."