Xcopy工具,代表著擴展複製,是在Windows中用於大量數據複製的流行命令行實用程序。與傳統的copy
命令相比,Xcopy具有更多功能和開關,可以在複製或移動文件和文件夾時提供更好的控制。
在本指南中,您將學習如何在各種文件複製場景中使用Xcopy。從複製單個文件、多個目錄,應用過濾器或排除等方面,到最終,您將獲得在日常文件複製任務中使用Xcopy的知識。
讓我們開始吧!
先決條件
要按照本指南中的示例進行操作,您將需要以下內容。
- A Windows (server or client) computer. Xcopy comes built-in to Windows, and you don’t need to download anything else. This guide will use Windows 10 Build 1909.
- Xcopy可在命令提示符或PowerShell上運行,本文假設您已經打開了其中一個。
理解Xcopy命令
Xcopy是一個命令行實用程序,自Windows 98以來就已經內置。您可以在%WINDIR%\system32文件夾中找到這個工具,其可執行文件名為xcopy.exe
。
與Windows copy
命令相比,Xcopy在複製文件和目錄方面更加高效。此外,Xcopy具有更多選項,使其更具可定制性,可以控制文件複製行為。
好處
有幾個使用Xcopy的好處或優點,隨著您在本指南中的進展,您將會了解到。但以下是使用Xcopy的一些好處。
- 在大量文件和目錄上更快的複製操作。
- 簡化應用程式部署。
- 可以複製源目錄結構。
- 複製文件時保留所有者和存取控制列表(ACL)信息。
- 複製並覆蓋唯讀文件。
- 可以根據文件名、擴展名或路徑排除文件。
- 可以識別已更新的文件,這對差分備份很有用。
- 與腳本集成和使用。
限制
儘管Xcopy很棒,但它並非沒有限制。雖然這些限制可能不是一個破壞者,但在深入研究之前了解它們是很好的。
- 無法複製打開的文件。
- 不支持Windows Volume Shadow Copy Service (VSS)。缺乏VSS支持使Xcopy不適用於備份活動的操作系統卷。
- 當路徑加文件名的長度超過254個字符時,會出現記憶體不足的錯誤。
Xcopy 語法參考
Xcopy 可讓您執行各種文件和文件夾的複製操作。但首先,您需要了解其語法和選項。有很多選項可以更改 Xcopy 的操作方式。為了幫助您理解這些選項,接下來的表格將詳細介紹它們。
第一個路徑指定是指源文件;第二個路徑指定是指目標文件。
[源]
– 要複製的文件的路徑名稱(接受通配符)。您應該指定驅動器、路徑和要複製的文件。[目的地]
– 新文件的路徑名稱。如果您不指定目標路徑,該命令將文件複製到與源相同的路徑。[選項]
– 可以是下表中的任何選項。您也可以運行xcopy /?
命令或訪問 Xcopy 在線文檔 來查看這些選項。
源選項
Switch | Explanation |
/A | Copy files that have the archive attribute. |
/M | Copy files with the archive attribute set, then switches off the archive attribute at the destination. Use this option when creating routine backups. |
/H | Copy hidden and system files and directories. The default value is N. |
/D:mm-dd-yyyy | Only copies that files with modification date on or after the given date. Without using this option, the command will copy only the files whose date/time is newer than the destination. |
/U | Only copies the files that already exists at the destination. |
/S | Copies folders and subfolders recursively excluding the empty one. |
/E | Copies folders and subfolders recursively including the empty one. |
/EXCLUDE:file1[+file2][+file3]… | Specify the text file(s) containing a list of strings to match absolute file paths to exclude. |
目的地選項
Switch | Explanation |
/I | If the destination does not exist, using this option assumes that the destination is a directory and creates it. If you omit this option, the command prompts to confirm if the destination is a directory or a file. |
/R | Overwrites read-only files. |
/T | Creates a recursive folder structure at the destination without copying the files. This option does not include copying empty folders. To include empty folders, use this option together with the /E option. |
/K | Preserves the file attributes during the copy. Otherwise, the command will reset read-only attributes. |
/N | Copies files using their short file names. |
/O | Copies files including ownership and access control list (ACL) information. |
/X | Copies files including file audit settings and ACL information (implies using /O). |
複製選項
Switch | Explanation |
/W | Prompts for a key press before the copy process can start. |
/P | Prompts (Y/N) before creating each file. |
/Y | Suppresses the confirmation to overwrite destination file if exists. |
/-Y | Prompts to confirm overwriting an existing destination file. |
/V | Verifies that the source and destination file sizes are identical. |
/C | Ignores errors and forces the command to continue copying. |
/B | Copies only the symbolic link but not the link target file. |
/G | Copies encrypted files to a destination that does not support encryption. |
/J | Copies files without using the buffer. This switch useful when copying very large files. |
/Q | Suppresses the display of file names while copying. |
/F | Displays the full source and destination file paths while copying. |
/L | Only displays which files to copy without copying them. This switch can be useful when testing Xcopy commands with multiple options to assess the expected result. |
/Z | Copies files in restartable mode. Using this option, the command gracefully stops copying files during network interruption. The copying will resume after re-estabslishing the network connection. |
使用 Xcopy:使用示例
現在您已經熟悉了 Xcopy 的語法和選項,是時候開始實際使用它了,通過結合一個或多個選項來進行。在接下來的部分中,您將探索許多不同的情景,以使用 Xcopy 複製文件和文件夾。
列出要複製的文件
如果您有一个包含大量文件的文件服务器,您想要复制这些文件,可能是到备份位置,首先测试一下您的Xcopy命令是理想的。当您需要测试Xcopy时的一种情况是当您结合多个Xcopy选项时。
使用Xcopy的/L
开关,您可以模拟发出命令时会发生什么,通过列出它将复制哪些文件。这样,您可以确认您的命令是否会复制您打算复制的所有文件。
复制单个文件
您可以使用Xcopy执行的最基本操作是从源到目标复制文件,而不使用任何选项。例如,下面的命令将把一个文本文件复制到目标目录,文件名将保持不变。
您还可以通过运行下面的命令复制源文件并更改目标文件名。
将文件复制到新文件夹
使用Xcopy,您可以复制文件并动态创建目标目录。为此,您需要将/I
选项附加到Xcopy命令。
例如,下面的命令将文件从C:\Workarea\Demo文件夹复制到D:\Workarea文件夹。如果目标文件夹不存在,Xcopy将使用/I
选项创建目标文件夹。
递归复制所有文件和文件夹
除了从一个文件夹复制文件到另一个文件夹之外,Xcopy还可以让您递归复制文件夹和文件。有两种方法可以进行递归复制,一种是包括空文件夹,一种是不包括空文件夹。
將所有檔案和目錄複製,同時忽略空目錄,在Xcopy命令的末尾添加/S
選項,如下所示。
另一方面,要在遞歸複製期間包含空目錄,則將/E
選項添加到命令中。
包括隱藏和系統文件
默認情況下,Xcopy不會在複製操作中包含隱藏和系統文件。但如果您需要強制Xcopy包含隱藏和系統文件,則將/H
開關添加到命令中。
下面的命令遞歸複製所有文件,包括隱藏和系統文件。此命令還會忽略錯誤,創建目標文件夾,並覆蓋現有文件。
保留只讀文件屬性
Xcopy可以處理並保留的另一個屬性是文件的只讀屬性。默認情況下,當Xcopy複製一個只讀文件時,它會在目的地刪除文件的只讀屬性。要阻止Xcopy刪除只讀屬性,請在命令中添加/K
開關。
例如,下面的命令將一個只讀文件複製到另一個位置,結果目的地文件仍將具有只讀屬性。此命令還將覆蓋目的地文件(如果文件存在)。
作為保留文件為只讀的副作用,Xcopy無法在將來的複製操作中覆蓋同一文件。但是,您可以通過添加/R
開關來強制Xcopy覆蓋只讀文件。
過濾要複製的文件
假設源文件夾和子文件夾中有多個文件需要複製。Xcopy 允許您輸入通配符以過濾要複製的文件。
例如,下面的命令僅遞歸地從C:驅動器的根目錄複製具有.cs擴展名的文件到E:驅動器的根目錄。此命令還將忽略錯誤,並在不提示確認的情況下覆蓋現有文件。
排除復制的文件和文件夾
A powerful feature of Xcopy is its ability to exclude files from the copy process. To use this feature, you can leverage the /EXCLUDE
switch. This switch accepts the names of the file(s) that contain the exclusion lists.
首先,您需要創建或擁有包含排除列表的文件。例如,您可以擁有一個名為Exclude.txt的文本文件,其中包含以下條目。正如您所見,排除文件可以具有特定的文件名,文件擴展名和文件夾作為條目。
要運行帶有排除的Xcopy,運行下面的命令並將排除文件的完整路徑指定為/EXCLUDE
開關。此命令使用C:\Workarea\XCopyDemo\Exclude.txt文件。
結果呢?Xcopy 運行以複製文件,但跳過xyz.txt、Exclude.txt、所有具有.pdf和.png擴展名的文件,以及exclude目錄中的所有文件。
執行差分複製
當您需要從一個位置備份文件到另一個位置時,Xcopy 提供了一個選項,讓您執行差分備份。與複製所有文件不同,差分備份僅複製修改日期在您指定的日期之後的文件到/D:m-d-y
開關。
例如,要复制修改日期为2021年4月1日或之后的文件,请运行下面的命令。此外,该命令执行递归复制,忽略错误,并覆盖目标位置的现有文件。
如果不使用/D
选项指定日期,Xcopy将仅复制比目标文件新的源文件。
基于存档属性复制文件
通常,备份程序在备份操作之后会删除文件的存档属性。在修改文件后(即编辑和保存),Windows会自动重置文件的存档属性。
如果您创建了一个使用Xcopy备份文件的脚本,您可以使用存档属性来确定是否复制或备份文件。
要复制具有存档属性的文件,可以利用/A
和/M
开关。使用哪个开关取决于是否要保留文件的存档属性。
以下命令执行对仅具有存档属性的文件进行递归复制。由于使用了/A
开关,目标文件在复制后将保留存档属性。
相反,如果要在复制到目标位置后删除源文件的存档属性,请改用/M
开关。
保留文件所有者和ACL信息
想像一下創建整個個人檔案夾的備份。每個文件可能有不同的所有者或獨特的權限。如果需要恢復這些文件,您希望保留相同的所有者和權限。
這樣,整個過程將看起來無縫,用戶仍然可以像以前一樣訪問文件。但首先,您需要確保在保留現有的所有者和訪問權限的同時備份這些文件。
要複製文件並保留所有者和ACL信息,請將/O
參數添加到xcopy
命令中,如下所示。
除了保留所有者和ACL信息外,您還可以包括文件的審計設置。如果您的組織應用組策略對象(GPO)來審計文件,複製審計設置可能很有用。
使用Xcopy複製文件時,要包括文件審計設置,請使用/X
開關。/X
開關也意味著同時使用/O
開關,因此您不必同時使用兩個開關。
在網絡上複製文件和文件夾
Xcopy不僅可以在相同或不同磁盤的位置之間複製文件,還可以在網絡上複製文件。不幸的是,在網絡上複製文件並不總是可靠的。網絡連接可能會出現短暫中斷,有時甚至完全失去連接。
幸運的是,您可以在可重啟模式下運行Xcopy。這意味著,即使由於網絡錯誤導致複製進度停止,重新建立網絡連接後,複製也可以繼續進行。要在可重啟模式下運行Xcopy,您需要在命令中添加/Z
開關。
例如,下面的命令從C:\Workarea文件夾遞歸地複製文件到網絡位置。/Z
參數使Xcopy在可重啟模式下運行。
使用
/Z
開關,Xcopy還會顯示文件複製進度的百分比。
使用非緩衝I/O複製文件
緩衝I/O對應操作系統在文件系統緩存中緩衝磁盤讀取和寫入的方式。雖然緩衝可以加速對同一文件的後續讀取和寫入,但代價是高昂的。因此,非緩衝I/O(或原始文件複製)是複製大文件的首選方法。
這種複製方法可以減少文件系統緩存的開銷,並防止大量文件數據輕易刷新文件系統緩存。
要使用無緩存I/O進行複製大文件,您可以在Xcopy命令中添加/J
開關,如下所示。
帶驗證複製文件
像其他任務一樣,複製文件可能並不總是返回100%的成功結果。即使沒有可見的錯誤,在傳輸過程中一些文件可能會損壞。
使用Xcopy,您可以使用/V
開關來驗證複製後的目標和源文件是否相同,根據它們的大小。相同的源文件和目標文件表示複製成功並且文件完整。
下面的命令將所有文件從C:\Workarea\XCopyDemo
複製到C:\Workarea\Backup
,並使用/V
開關驗證每個文件。/F
開關顯示源文件和目標文件的完整路徑。
複製加密文件
Xcopy還支持將加密文件複製到不支持加密的目的地。使用/G
開關,Xcopy複製加密的源文件並創建解密的目標文件。
這種複製模式在將加密文件備份到網絡共享或非「加密文件系統(EFS)」卷時非常有用。
複製文件夾結構
在某些情況下,備份腳本或程序可能需要您在從源頭複製文件之前預先配置目的地。在需要時,您可以使用 Xcopy 複製源文件夾結構而不包括內容。
為此,執行 Xcopy 命令並使用/T
開關。使用 /T
開關將導致 Xcopy 只複製目錄樹結構到目的地,但會忽略空目錄。
您還可以在命令中添加 /E
開關以包括空目錄,如下面示例命令所示。
常見錯誤
如果事情可以出錯,那它很可能會出錯。無論是拷貝文件,錯誤的機會都是存在的。以下是您可能遇到的常見 Xcopy 錯誤。
參數數量無效
當您輸入的命令包含空格時,通常會出現此錯誤。為了避免此錯誤,在輸入包含空格的源或目的地路徑時,您應該用雙引號括起路徑。
例如,如果路徑是C:\Documents and Settings,輸入路徑時應該為“C:\Documents and Settings”。
無法執行循環拷貝
如果您正在複製的源目錄中還包含目標目錄,則會發生此錯誤。在這種情況下,Xcopy 將進入循環,導致錯誤。當使用 Xcopy 時,如果要拷貝所有目錄和子目錄,目的地必須是完全獨立的目錄或磁盤。
解析錯誤
當您在命令中輸入錯誤或無效的語法時,會發生此錯誤。例如,當您在引號中指定路徑但缺少結束引號時,就可能遇到此錯誤。
例如,下面的命令在目標路徑中缺少結束的雙引號:
退出代碼
Xcopy 會返回操作的退出代碼,您可以使用它來判斷操作是否成功。退出代碼非常有用,特別是如果您的任務或腳本根據收到的退出代碼執行操作。
命令殼層將退出代碼保存在 %ErrorLevel%
變量中。然後,您的代碼可以檢查此變量的值,以確定 Xcopy 操作的結果。
下面是列出所有 Xcopy 退出代碼的表格。
Exit Code | Purpose |
0 | This exit code means that there were no errors. |
1 | This exit code means that Xcopy did not find any files to copy. |
2 | This exit code means that the Xcopy was terminated by pressing CTRL+C. |
4 | This exit code means that an initialization error happened either because of insufficient memory or disk space or because you’ve entered invalid syntax. |
5 | This exit code means that there was a disk write error. |
使用 Xcopy 進行腳本編寫
除了交互式使用 Xcopy 外,如果您將其用於腳本中的任務自動化,您可以更好地利用它的優勢。下面是幾個示例,演示如何在腳本中使用 Xcopy。
使用錯誤處理的 Xcopy 批次腳本
此示例批次腳本使用錯誤處理邏輯遞歸地複製所有文件。根據錯誤或退出代碼,腳本會返回一條顯示錯誤原因的消息。
要創建批次文件,打開您選擇的文本或代碼編輯器,複製下面的代碼,將其粘貼到編輯器中,並將文件另存為 copycomplete.bat。
接下來,在命令提示符或 PowerShell 中執行該腳本,後面跟上源文件夾和目標文件夾。

Xcopy批次腳本移動數據
Xcopy沒有內建功能來移動來源到目的地的文件和文件夾。但是,作為一個解決方法,您可以創建一個腳本,該腳本首先會複製文件,然後從來源刪除文件。
下面的代碼將文件複製到目的地。如果複製過程成功,腳本將刪除來源的文件。複製下面的代碼並將其保存在名為movefiles.bat的新文件中。
接下來,要執行movefiles.bat批次文件,請在命令提示符或PowerShell中調用其名稱,然後是來源和目的地路徑,就像您在上一個示例中所做的那樣。
結論
如果您的工作涉及大量複製文件或創建文件備份,Xcopy是一個優秀的工具,可以幫助您輕鬆完成工作。Xcopy提供準確快速的文件複製結果,並提供許多選項來定製其行為,以滿足您的要求。