如何複製檔案或資料夾而不覆蓋現有檔案?


要在遠端路徑上覆制檔案/資料夾而不覆蓋現有檔案/資料夾,您可以使用多個 cmdlet,例如 Copy-Item、Robocoy 和 Xcopy 等。由於 Copy-Item 是一個標準的 cmdlet,我們將檢查其支援的引數是否可以防止覆蓋。

如果 Copy-Item 不起作用,我們將檢查其替代命令。Copy-Item 只是簡單地覆蓋目標路徑上的檔案和資料夾,並複製較新的檔案。

例如,要將檔案從原始檔夾 C:\Test1 複製到目標資料夾 C:\Test2,使用以下命令,它會簡單地覆蓋檔案而不提示。

示例

Copy-Item C:\Test1\* C:\Test2 -Recurse -Verbose

輸出

PS C:\Temp> Copy-Item C:\Test1\* C:\Test2 -Recurse -Verbose
VERBOSE: Performing the operation "Copy File" on target "Item: C:\Test1\File1.txt
Destination: C:\Test2\File1.txt".
VERBOSE: Performing the operation "Copy File" on target "Item: C:\Test1\File2.txt
Destination: C:\Test2\File2.txt".

我們還有另一個 -Confirm 引數,但它只是向用戶確認是否需要將檔案複製到目標資料夾。如果我們為 -Confirm 引數選擇 $True,則它會詢問每個檔案是否需要複製,但如果系統上有數百個檔案,則此方法將不起作用。

Copy-Item C:\Test1\* -Destination C:\Test2\ -Confirm:$true -Verbose
PS C:\Temp> Copy-Item C:\Test1\* -Destination C:\Test2\ -Confirm:$true -Verbose

Confirm
Are you sure you want to perform this action?
Performing the operation "Copy File" on target "Item: C:\Test1\File1.txt Destination:
C:\Test2\File1.txt".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):

使用 -Force 引數用於覆蓋只讀檔案內容。因此,這也沒有幫助,所以我們可以使用另一種方法,例如透過 Get-ChildItem 過濾現有檔案並跳過它們,但這需要編寫一些程式碼和迴圈,而我們有一個 robocopy 命令,它支援防止覆蓋檔案/資料夾。

Robocopy C:\Test1\ C:\Test2\ /E /XC /XN /XO

輸出

PS C:\> Robocopy C:\Test1\ C:\Test2\ /E /XC /XN /XO
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : Saturday, August 29, 2020 2:15:33 PM
Source : C:\Test1\
Dest : C:\Test2\
Files : *.*
Options : *.* /S /E /DCOPY:DA /COPY:DAT /XO /XN /XC /R:1000000 /W:30
------------------------------------------------------------------------------
      2 C:\Test1\
   *EXTRA File    8 File3.txt
100% New File    11 File2.txt
------------------------------------------------------------------------------
         Total    Copied Skipped Mismatch FAILED Extras
Dirs :    1          0      1       0         0       0
Files :   2          1      1       0         0       1
Bytes :  22         11     11       0         0       8
Times : 0:00:00    0:00:00                0:00:00   0:00:00
Speed :    1833 Bytes/sec.
Speed :    0.104 MegaBytes/min.
Ended : Saturday, August 29, 2020 2:15:33 PM

下面解釋了開關。

/E − 複製子項(如 Copy-Command 中的 -recursive)

/XC − 防止覆蓋具有相同時間戳的檔案。

/XN − 防止覆蓋時間戳比原始檔更新的檔案。

/XO − 防止覆蓋時間戳比原始檔舊的檔案。

更新於: 2020年9月3日

6K+ 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告