Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Бэкап с выбором определенных файлов (http://forum.oszone.net/showthread.php?t=328613)

Dima42rus 26-07-2017 06:52 2754066

Бэкап с выбором определенных файлов
 
Добрый день!

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

Iska 26-07-2017 07:58 2754076

Куда? В каком виде и чем делать?

Dima42rus 26-07-2017 08:32 2754079

Делать в другую папку. В виде новой папки с текущей датой. Я пробовал уже сделать

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 2754116

Dima42rus, В чём смысл задачи? Как часто это надо делать? Если каждый день, то почему за три дня?
Цитата:

Цитата У xcopy есть ключ
/D:m-d-y Копирует файлы, измененные либо в указанный день, либо после.
Если дата не указана, копируются только те файлы,
которые новее в исходной папке.

Проблема, дату посчитать.
Цитата:

Цитата Не лучше ли использовать утилиту forfiles, если она присутствует у Вас в системе.
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 2754128

Угу. Утром — деньги, вечером — стулья Сначала определиться, затем — forfiles, robocopy, архиватор.

Dima42rus 27-07-2017 04:10 2754310

megaloman, Спасибо за совет, воспользуюсь FORFILES.

Iska 27-07-2017 05:01 2754312

Dima42rus, лучше воспользуйтесь RoboCopy:
Цитата:

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

Dima42rus 27-07-2017 05:53 2754313

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

Iska 27-07-2017 06:25 2754315

Dima42rus, и не надо реализовывать.
Цитата:

Цитата 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 2754322

Iska, Спасибо большое, то что мне нужно! Сделал, все работает, как надо!


Время: 01:29.

Время: 01:29.
© OSzone.net 2001-