Windows

Robocopy,不要覆蓋現有文件,而是複制更改/新文件

  • September 17, 2019

是否可以在不使用新/更改/刪除文件覆蓋目標目錄中的文件的情況下鏡像這兩個目錄。像快照之類的東西。

範例:將包含所有文件和子目錄的源目錄複製到目標目錄,但如果目標目錄包含例如文件A.xls並且A.xls在源目錄中已更改,則複製A.xls但保留A目標目錄中的前一個。要保留以前的文件,可以將日期戳或計數器添加到文件名中。

複製後的範例:

SomeDirectory

|–A.xls

|–A_20120701.xls

|–A_20120920.xls

謝謝你。

不,使用 Robocopy 無法做到這一點。如果源中不再存在文件,則使用 Robocopy 鏡像文件夾路徑將刪除目標中的文件。您可以確保不會用舊版本覆蓋文件,但在復製過程中不能保留舊版本/重命名。

我編寫了一個命令腳本/批處理文件,它複製修改過的文件,但根據腳本執行的日期創建樹結構

例如,我的一個特定文件的樹將是。

c:\_archive\201209\
                   23\
                       0930
                            Todays notes.txt
                       1145
                            Todays notes.txt
                   24\
                       1000
                            Todays notes.txt

如果您覺得有用,我可以發布該腳本的範例。

由於大眾需求,請在下面找到我的基本備份腳本。

@echo off
cls
rem parse the output of the date /t command to create a date in the format yyyymmdd, and also remove the delimiter (/)
rem  store the results in environment variables
for /F "tokens=1,2,3,4 delims=/ " %%i IN ('date /t') do SET Z_DATE=%%k%%j%%i 
for /F "tokens=1,2,3,4 delims=/ " %%i IN ('date /t') do SET Z_YEAR=%%k
for /F "tokens=1,2,3,4 delims=/ " %%i IN ('date /t') do SET Z_MONTH=%%j
for /F "tokens=1,2,3,4 delims=/ " %%i IN ('date /t') do SET Z_DAY=%%i

echo date %Z_DATE%
echo year %Z_YEAR%
echo month %Z_MONTH%
echo day %Z_DAY%

rem parse the output of the time /t command to remove the delimeter (:)
rem  store the result in an environment variable
for /f "tokens=1,2 delims=:. " %%i IN ('time /t') do SET Z_TIME=%%i%%j

echo time %Z_TIME%
rem change the colour to a nice deep green on black.
color 02
::-------------------------

@echo on
xcopy "c:\MyFiles\*.*" "C:\MyArchive\ByDate\%Z_YEAR%%Z_MONTH%\%Z_DAY%\%Z_TIME%%~p1%~n1\" /ksymhr
@if @@ERRORLEVEL==1 SET Z_BACKUP_ERROR_FLAG=1

Goto End

::---------------------------------------------------------------------------
:NotifyUser
echo.
echo An error occurred during the backup.
echo.
pause

::---------------------------------------------------------------------------
:End

echo %Z_DATE%
echo %Z_TIME%
time /t

rem Clear out the environment variables
SET Z_DATE=
SET Z_TIME=
SET Z_BACKUP_ERROR_FLAG=

如果您對此腳本有任何疑問(我從我的主備份腳本中快速抄襲它,並且沒有徹底測試它),請通過我的 gmail 帳戶給我發送電子郵件,主題為“伺服器故障備份腳本查詢”。如果您無需詢問就可以計算出我的 gmail 地址,那麼我將很樂意為您提供幫助。

引用自:https://serverfault.com/questions/431339