windows - robocopy教學 - xcopy教學




複製文件而不覆蓋 (8)

Robocopy 或“可靠的文件複製”是命令行目錄複製命令。 它已經作為從Windows NT 4.0開始的Windows Resource Kit的一部分提供,並作為Windows Vista,Windows 7和Windows Server 2008的標準功能引入。

   robocopy c:\Sourcepath c:\Destpath /E /XC /XN /XO

詳細說明(使用Hydrargyrum,HailGallaxar和Andy Schmidt的答案):

  • /E使Robocopy遞歸複製子目錄,包括空目錄。
  • /XC排除具有相同時間戳但文件大小不同的現有文件。 Robocopy通常覆蓋這些。
  • /XN排除比目標目錄中的副本更新的現有文件。 Robocopy通常覆蓋這些。
  • /XO排除比目標目錄中的副本舊的現有文件。 Robocopy通常覆蓋這些。

隨著更改,更舊和更新的課程被排除在外,Robocopy完全符合原始海報的要求 - 無需加載腳本環境。

參考文獻: TechnetWikipedia
從下載: Microsoft下載鏈接 (鏈接上次驗證2016年3月30日)

我似乎無法在命令行上找到一種方法來說“將所有文件從目錄A複製到目錄B,但是如果文件已經存在於目錄B中,請不要覆蓋它,不管哪個文件更新,不要提示我。“

我已經通過複製,移動,xcopy和robocopy,而且我能得到的最接近的是,您可以告訴robocopy“複製A到B,但不要用較舊的文件覆蓋較新的文件”,但這對我不起作用。 我查看了xxcopy,但放棄了它,因為我不希望第三方依賴於Visual Studio後構建事件,這將需要其他SVN用戶安裝該工具才能完成構建。

我想將一個命令行添加到Visual Studio 2010中的生成後事件中,以便從新模型對象的T4模板生成的文件分配到它們所屬的項目文件夾,但為現有對象重新生成文件不要覆蓋潛在編輯的目標文件。

由於T4模板重新生成,源文件總是更新,我不能可靠地使用“更新”開關,我不這麼認為。

我為這些項目使用了部分類,但我還生成了其他不能使用部分類的東西(例如,生成默認的EditorTemplate或DisplayTemplate * .ascx文件)。

任何人有任何類似的問題,他們已經解決?


Belisarius的解決方案很好。

詳細說明這個稍微簡潔的答案:

  • /E使Robocopy遞歸複製子目錄,包括空目錄。
  • /XC排除具有相同時間戳但文件大小不同的現有文件。 Robocopy通常覆蓋這些。
  • /XN排除比源目錄中的副本更新的現有文件。 Robocopy通常覆蓋這些。
  • /XO排除比源目錄中的副本舊的現有文件。 Robocopy通常覆蓋這些。

隨著更改,更舊和更新的課程被排除在外,Robocopy完全符合原始海報的要求 - 無需加載腳本環境。


一個簡單的方法是使用/ MIR選項來鏡像這兩個目錄。 基本上它只會將新文件複製到目的地。 在下一個命令中,將源文件和目標文件替換為文件夾的路徑,該腳本將搜索任何帶有任何擴展名的文件。

robocopy <source directory> <destination directory> *.* /MIR

你可以試試這個:

echo n | copy /-y <SOURCE> <DESTINATION>

-y只是在覆蓋之前提示,我們可以將n提供給所有這些問題。 所以這實質上就是複制不存在的文件。 :)


我只是想從我自己的測試中澄清一些事情。

@Hydrargyrum寫道:

  • / XN排除比源目錄中的副本更新的現有文件。 Robocopy通常覆蓋這些。
  • / XO排除比源目錄中的副本更早的現有文件。 Robocopy通常覆蓋這些。

這實際上是倒退。 XN會“排除較新”文件,但會排除比目標目錄中的副本更新的文件。 XO確實“排除舊的”,但它排除比目標目錄中的副本更舊的文件。

當然,一如既往地進行自己的測試。


有一個奇怪的方式來做到這一點與xcopy:

echo nnnnnnnnnnn | xcopy /-y source target

只需包含您正在復制的n個文件即可,它將回答所有覆蓋問題。


這裡是批處理文件格式:

@echo off
set source=%1
set dest=%2
for %%f in (%source%\*) do if not exist "%dest%\%%~nxf" copy "%%f" "%dest%\%%~nxf"

For %F In ("C:\From\*.*") Do If Not Exist "C:\To\%~nxF" Copy "%F" "C:\To\%~nxF"




robocopy