Войти

Показать полную графическую версию : [решено] Бэкап с выбором определенных файлов


Dima42rus
26-07-2017, 06:52
Добрый день!

Помогите пожалуйста решить задачу. Раньше батники не приходилось создавать.
Есть папка "archive" в ней есть папки "1", "2" и "3" в них есть файлы. Нужно создать бэкап всех папок, но в папке "3" нужен выборочный бэкап по дате создания, в папке много фалов за разные промежутки времени, необходимо выбирать файлы за последние три дня и делать их бэкап.
Спасибо!

Iska
26-07-2017, 07:58
Куда? В каком виде и чем делать?

Dima42rus
26-07-2017, 08:32
Делать в другую папку. В виде новой папки с текущей датой. Я пробовал уже сделать

Set 1=C:\Users\SUEK\Desktop\archive
Set 2=C:\Users\SUEK\Desktop\new
If Exist "%2%\%date%\%Time:~0,2%_%Time:~3,2%\" MD "%2%\%date%\%Time:~0,2%%_%Time:~3,2%\"
XCOPY /E /F /H /R /K /Y /D "%1%\*" "%2%\%date%\%Time:~0,2%_%Time:~3,2%\"

Делает бэкап всех папок. Но в нужной подпапке сохраняет все файлы я не за последних 3 дня.

megaloman
26-07-2017, 12:27
Dima42rus, В чём смысл задачи? Как часто это надо делать? Если каждый день, то почему за три дня? /D:m-d-y Копирует файлы, измененные либо в указанный день, либо после.
Если дата не указана, копируются только те файлы,
которые новее в исходной папке.
Проблема, дату посчитать. FORFILES [/P <путь>] [/M <маска_поиска>] [/S]
[/C <команда>] [/D [+ | -] {dd.MM.yyyy | dd}]

/D <дата> Выбор файлов, у которых дата последнего изменения
больше или равна (+) либо меньше или равна
(-) указанной дате при использовании формата
"dd.MM.yyyy"; либо файлов, у которых дата последнего
изменения больше или равна (+)
текущей дате плюс "dd" дней либо меньше или
равна (-) текущей дате минус "dd" дней.
Допустимым числом дней "dd" является любое
число в диапазоне 0 - 32768.
"+" используется по умолчанию, если знак не указан.

Я бы всё-таки использовал архиватор, например, winrar со стандартными ключами.
Но, всё таки, сначала надо определиться, зачем это нужно. Какова система в хранении.
Тупо рисовать команды для копирования не очень интересно, надо видеть конечную цель.

Iska
26-07-2017, 13:07
Угу. Утром — деньги, вечером — стулья Сначала определиться, затем — forfiles, robocopy, архиватор.

Dima42rus
27-07-2017, 04:10
megaloman, Спасибо за совет, воспользуюсь FORFILES.

Iska
27-07-2017, 05:01
Dima42rus, лучше воспользуйтесь RoboCopy:
/MAXAGE:n :: Максимальный возраст файла - исключить файлы, возраст которых превышает n дней.
дабы не высчитывать дату.

Dima42rus
27-07-2017, 05:53
Iska, сделал через /MAXAGE:n, но этот параметр применяется ко всем папкам которые скопировались, а мне надо к определенной(только к одной). Именно эту функцию не удается реализовать

Iska
27-07-2017, 06:25
Dima42rus, и не надо реализовывать.
Есть папка "archive" в ней есть папки "1", "2" и "3" в них есть файлы. Нужно создать бэкап всех папок, но в папке "3" нужен выборочный бэкап по дате создания, »
Разные условия — разные задания. Используйте три последовательных команды robocopy.exe. Для «1» и «2» без параметра /maxage, для «3» — с параметром. Наподобие:
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=C:\Мои проекты\0101\Source
set sDestFolder=C:\Мои проекты\0101\Destination

robocopy.exe "%sSourceFolder%\01" "%sDestFolder%\01" /e
robocopy.exe "%sSourceFolder%\02" "%sDestFolder%\02" /e
robocopy.exe "%sSourceFolder%\03" "%sDestFolder%\03" /e /maxage:3

endlocal
exit /b 0

Либо два задания с использованием исключений:
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=C:\Мои проекты\0101\Source
set sDestFolder=C:\Мои проекты\0101\Destination

robocopy.exe "%sSourceFolder%" "%sDestFolder%" /e /xd "%sSourceFolder%\03"
robocopy.exe "%sSourceFolder%" "%sDestFolder%" /e /xd "%sSourceFolder%\01" "%sSourceFolder%\02" /maxage:3

endlocal
exit /b 0

Каталоги «1», «2» и «3» в каталоге назначения предварительно создавать не требуется: если они отсутствуют — они будут созданы.

Dima42rus
27-07-2017, 06:51
Iska, Спасибо большое, то что мне нужно! Сделал, все работает, как надо!




© OSzone.net 2001-2012