Можно ли отразить два каталога без перезаписи файлов в каталоге назначения новыми / измененными / удаленными файлами. Что-то вроде снимков.
Пример: скопируйте исходный каталог со всеми файлами и подкаталогами в целевой каталог, но если целевой каталог содержит, например, файл 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, не спрашивая, я буду рад вам помочь.
Строки для анализа даты, года, месяца и дня у меня не работали. Однако это было так, и остальная часть скрипта работает отлично:
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%