是否可以镜像两个目录,而不会用新的/更改的/删除的文件覆盖目标目录中的文件。类似于快照。
示例:将源目录及其所有文件和子目录复制到目标目录,但如果目标目录包含文件,例如,源目录中的文件已更改A.xls
,则复制并在目标目录中保留先前的文件。要保留先前的文件,可以在文件名中添加日期戳或计数器。A.xls
A.xls
A
复制后的示例:
SomeDirectory
|--A.xls
|--A_20120701.xls
|--A_20120920.xls
谢谢。
答案1
不,使用 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 地址,那么我很乐意为您提供帮助。
答案2
解析日期、年份、月份和日期的行对我来说不起作用。然而,这些行确实起作用了,并且脚本的其余部分运行良好:
Set Z_Date=%date:~10,4%%date:~4,2%%date:~7,2%
Set Z_Year=%date:~10,4%
Set Z_Month=%date:~4,2%
Set Z_Day=%date:~7,2%