Robocopy,不要覆盖现有文件,而是复制更改/新文件

I d*_*ow. 5 windows backup robocopy snapshot

是否可以在不使用新的/更改的/删除的文件覆盖目标目录中的文件的情况下镜像两个目录。类似于快照的东西。

示例:将包含所有文件和子目录的源目录复制到目标目录,但如果目标目录包含例如文件A.xls并且A.xls在源目录中已更改,则复制A.xlsA在目标目录中保留前一个。要保留以前的文件,可以将日期戳或计数器添加到文件名中。

复制后的示例:
SomeDirectory
|--A.xls
|--A_20120701.xls
|--A_20120920.xls

谢谢你。

com*_*ill 5

不,这是不可能使用 Robocopy 的。使用 Robocopy 镜像文件夹路径将删除目标中的文件,如果它们不再存在于源中。您可以确保不会用旧版本覆盖文件,但在复制过程中不能保留旧版本/重命名。

我写了一个命令脚本/批处理文件来复制修改后的文件,但根据脚本运行的日期创建树结构

例如,我的一个特定文件的树将是。

c:\_archive\201209\
                    23\
                        0930
                             Todays notes.txt
                        1145
                             Todays notes.txt
                    24\
                        1000
                             Todays notes.txt
Run Code Online (Sandbox Code Playgroud)

如果您觉得有用,我可以发布该脚本的示例。

由于大众需求,请在下面找到我的基本备份脚本。

@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=
Run Code Online (Sandbox Code Playgroud)

如果您对此脚本有任何疑问(我从我的主备份脚本中快速编写了它,但没有对其进行彻底测试),请通过我的 gmail 帐户向我发送电子邮件,主题行“服务器故障备份脚本查询”。如果您无需询问就可以计算出我的 gmail 地址,那么我将很乐意为您提供帮助。