![]() |
Копирование только измененных файлов + контрольная сумма
Доброго всем времени суток. Помогите с написанием скрипта, так как нужные (для задачи) команды на просторах интернета не нашел.
Задача такова: Есть папка "SHARE" и папка "SHARE-ARC". Папка "SAHRE" - постоянно каждый день наполняется данными, изменяется. Соответственно папка "SHARE-ARC" - это ее копия, и сервер каждый вечер должен брать все измененные файлы из "SAHRE" и копировать в "SHARE-ARC". Загвоздка вот в чем. Если в папке "SAHRE" какой-то файл изменился, но имя осталось прежним - он должен копироваться в папку "SHARE-ARC" рядом со своим первым файлом под именем .....(1). А файлы, которые один в один соответствуют - не копировать, дабы не занимать на это время и ресурсы. Файлы которые в структуре появились новые - копировать. Такое инкрементное копирование получается, но с дополнительным содержанием измененных файлов. xcopy полагаю тут не очень поможет... |
Полагаю вот такой вариант решает проблему частично. Пропускает файлы, если они не изменены, и заменяет, если были изменены.
А нужно создавать рядом, если были изменены. Такого что-то не найду в синтаксисе... Код:
robocopy "E:\SHARE" "F:\SHARE-ARC" /E /R:3 /W:5 /V /NP /Z /ZB /LOG:C:\Users\adm777\Desktop\robocopy.log /XD "_АРХИВ ЗАКАЗОВ" "_ХРАНИЛИЩЕ ФАЙЛОВ" "333" |
Код:
@Echo Off &Cls |
Проверил. Батник не отрабатывает. Может где-то ошибка((( окно быстро пропадает, пробовал и от админа и просто
|
Цитата:
Цитата:
Код:
@Echo Off &rem Cls |
хм.... вообще не отрабатывает((
Пути локальные, а не сетевые. и как старый будет добавляться под номером? все время переименовываться??? не совсем понимаю. Схема такая: Люди работают в шаре, например, один человек сегодня сделал файл-документ, а завтра его изменил и пересохранил. Так вот зеркальная шара для этого и нужна - чтобы иметь и сегодняшний документ и вчерашний. Так как они могут отличаться. И сервер отрабатывает скрипт - и собирает измененные файлы с первой шары во вторую, но получается должен при совпадении имени, но разной дате создания - сохранять его рядом, а старый файл со вчера уже лежит и его незачем переименовывать |
Цитата:
Отрабатывает, и неважно, какой путь, лишь бы реальный. Что-то Вы извратили Берите новую версию батника, там контроль наличия путей Цитата:
file.txt Пользователь у себя его изменил При копировании в архив старый файл станет с номером (1) а новый сохранит имя, итого получим: file.txt file(1).txt Пользователь снова изменил файл. При копировании в архив старый файл станет с номером (2) а новый сохранит имя, итого получим: file.txt file(1).txt file(2).txt Максимальный номер соответствует предпоследней версии файла Иначе как сравнивать по датам файл у пользователя и файл в архиве, если имена будут разные. Можно сделать, но это многократно медленнее. Стандартные команды, например, xcopy, сравнивают только одноименные файлы |
Вложений: 1
да, алгоритм записан верно.
батник делаю из txt, кодировка 866, акельпадом редактирую, тестировал на разных путях (в том числе с русскими символами). В батник просто нужно записать пропуск определенных папок еще, я изначально делал на robocopy (там есть пропуск папок). скрипт на robocopy такой (тоже 866): Код:
robocopy "E:\SHARE" "F:\SHARE-ARC" /E /R:3 /W:5 /V /NP /Z /ZB /LOG:C:\Users\Сисадмин\Desktop\robocopy.log /XD "_АРХИВ ЗАКАЗОВ" "_ХРАНИЛИЩЕ ФАЙЛОВ" "333" |
Ребята, нет ни у кого идей?
|
Вложений: 1
Skylear, Обратите внимание на положение кавычек в моём коде и в Вашем
Код:
Set "DirIn="E:\SHARE" |
Вложений: 1
Вариант с подпапками и исключениями
Код:
@Echo Off &Cls |
Проверил. Вроде отрабатывает. Единственное - это не копирует пустые каталоги. И еще можно сделать, чтобы выводил в cmd что делает? Паузу я так понимаю, можно просто закомментировать.
|
Вложений: 1
Цитата:
Чем дальше в лес, тем толще партизаны. Структурв воспроизводится. Log-файл ведётся
Код:
@Echo Off &Cls |
Время: 23:56. |
Время: 23:56.
© OSzone.net 2001-