Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Robocopy

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7

Открыть новую тему     Написать ответ в эту тему

slech



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
robocopy

 
Бесплатная консольная программа от Micrоsoft для копирования и синхронизации файлов. Входит в пакет утилит Resource Kit, начиная с Windоws NT. Начиная с Windоws Vista и Windоws Server 2008, входит в состав ОС (команда запуска: robocopy).
Инструкции:
руководство пользователя Robust File Copy Utility Version XP010
Краткий guide с командами на Microsoft TechNet (то же самое выводится по robocopy /?).


Ссылки на GUI:
Майкрософтовский:
1) Robocopy GUI 3.1.2 (с версией XP026 в комплекте);
Сторонние:
2) Robocopy GUI от SH-Soft (не обновлялась с 2005 года);
3) RoboMirror (не обновлялась с 2014 года);
4) RoboCop RoboCopy (не обновлялась с 2015 года)
5) WinRoboCopy (не обновлялась с 2016 года);
6) Easy RoboCopy (не обновлялась с 2018 года);
7) ChoEazyCopy (на данный момент поддерживается в актуальном состоянии).
 
Скачать: В составе Windоws Server 2003 Resource Kit Tools(совместим с XP и 2003), 12 Мб
 
Аналоги:
RichCopy
nnBackup
xxcopy
CopyMik

Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 10:45 26-12-2007 | Исправлено: vzar, 12:02 06-04-2021
Sinclair83

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Falcon99
Если всё ещё актуально и я правильно понял Вашу задачу, а также если не побрезгуете запустить стороннюю программку, то здесь "хотелка" #2
 
Передаёте программе два параметра:
1й -источник (в Вашем случае это "\\Server\Документы")
2й - зеркало ("E:\Backup")
 
и первый и второй параметры могут принимать ссылки как на локальные, так и на  удалённые ресурсы.
 
Батничек для запуска будет выглядеть примерно так:

Код:
@echo off
set "SourceDIR=\\Server\Документы"
set "TargetDIR=E:\Backup"
set "keys=/mir /SEC /zb /r:5 /W:10 /V /TS /FP /NP /TEE"
set "logfile=%~dp0robocopy.log.txt"
set "currDIR=%~dp0"
 
start /wait dcmf.exe "%SourceDIR%" "%TargetDIR%"
If %ERRORLEVEL% NEQ 0 exit /b
 
start /b /wait robocopy "%SourceDIR%" "%TargetDIR%" %keys% /LOG:"%logfile%"
 
 
::find "%logfile%" /i /v "same" > "%currDIR%robocopy_nosame.log"
::find "%logfile%" /i "*extra" > "%currDIR%robocopy_extra.log"
::find "%logfile%" /i " New" > "%currDIR%robocopy_new.log"
 
echo all is okay
echo.
pause

Если это нужно, то можно ещё подумать над тем, чтобы после отработки robocopy автоматом вернуть на прежнее место перемещённые ранее файлы. Пробуйте, тестируйте. Всё ли работает как должно?
 
P.S. то, что зачеркнул можно и нужно по-другому реализовать. Будет интерес, будет и продолжение.
 
Удачи!

Всего записей: 758 | Зарегистр. 07-01-2009 | Отправлено: 15:37 26-10-2019 | Исправлено: Sinclair83, 21:50 27-10-2019
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sinclair83
Благодарю, достаточно и такого варианта, пойду пробовать.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 10:11 29-10-2019
Sinclair83

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Falcon99
Разумеется, что батник нужно положить рядом с dcmf.exe (смотрю не сказал об этом ранее). Файл отчёта "robocopy.log.txt" сформируется также рядом с программой.
 
Дело в том, что сначала увидел (и уже успел реализовать) такое решение Вашей задачи:
Если при сравнении двух каталогов(источника и получателя) обнаружатся одноимённые файлы(естественно на одном и том же уровне), то удалить такой файл из каталога-получателя. Таким образом после обработки в каталоге-получателе должны остаться только те файлы, которых нет в каталоге-источнике. Далее переименовываем каталог-получатель, если в нём хоть что-то сталось, и запускаем robocopy. Если изначально и там и там все файлы на месте, то в результате получим пустой каталог-получатель.
НО... потом осознал, что это крайне опасный и ненадёжный вариант. Потому, что если внезапно и надолго нарушится связь между компьютерами уже на этапе запуска robocopy, то пользователь может остаться без большого/основного количества документов, а то и вовсе без ничего(сказал об этом выше). И это не есть хорошо. В итоге переписал. И сейчас программа работает именно так как Вы просили, то есть из каталога-источника изымаются(но не далеко, а рядышком в соседний каталог. Но непременно на уровень выше, чем каталог-получатель. Ведь у Вас в параметрах для robocopy задано зеркалирование, ключ "/MIR". Поэтому и на уровень выше. Иначе вся работа на смарку, просто затрётся.) только те файлы, которых нет в каталоге-источнике. Уже хорошо, но не достаточно. Ведь их нужно теперь ещё и обратно перемещать в каталог-приёмник, а потом ещё и копировать на источник. Лишние телодвижения. Короче... когда уже запостил здесь сообщение увидел др. вариант (на мой взгляд более подходящий для данной задачи).
А именно, заменить операцию перемещения на операцию копирования одноимённого файла из каталога-приёмника в каталог-источник. Таким образом ещё перед запуском robocopy в каталоге-источнике получим то же число файлов, что и в приёмнике. НО!  Это вовсе не значит, что эти оба каталога теперь идентичны и можно не прибегать к помощи robocopy, пренебречь им. Напротив, это категорически/настоятельно рекомендуется сделать(запустить его). Ведь сравнение производится не по содержимому или хотя бы по размеру файлов, а всего лишь на предмет совпадения имён. А ведь файлы в источнике могли редактироваться! И не раз! Не так ли? Вот тут-то в дело и вступает robocopy, который сгладит все шероховатости/неровности/выровняет каталоги по содержимому (освежит файлы в приёмнике). Согласно, теперь уже, эталону (каталогу-источнику).
В чём плюс? Не нужно делать третьего действия (возвращать ранее временно перемещённые файлы на свои места). А также нет риска потерять данные при обрыве связи, потому как пользователь в любом случае останется, пусть хоть и с устаревшими, но целыми данными. Что называется "при своих".
А что для этого надо? А только и всего, что заменить одну операцию на другую (вместо перемещения сделать копирование). Ну и развернуть поток файлов соответственно на 180 градусов (то есть нацелить его не на временный каталог рядом с приёмником, а на каталог-источник). Получается дёшево и сердито.
Надеюсь, что понятно объяснил суть.

Всего записей: 758 | Зарегистр. 07-01-2009 | Отправлено: 11:43 29-10-2019 | Исправлено: Sinclair83, 12:23 29-10-2019
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sinclair83
То что bat кладется около утилиты, или более четко прописываем путь к ней это понятно.
 
А вот то что вы используете каталог более высокого уровня чем получатель я считаю не совсем корректным, т.к. в качестве получателя может быть сетевой диск в корне с корнем которого и работает robocopy. Более оптимально добавить 3-й параметр для каталога для перемещения файлов.
 
Вы наверное не совсем поняли мою задумку. Просто с помощью robocopy делается резервная копия файлов пользователей. И чтобы не возникла ситуация когда они удалили файлы, которые соответственно будут удалены при зеркалировании. Хотелось "подстелить соломку" и удаленные пользователем файлы перенести на "месячишко" в отдельный каталог, так сказать на всякий случай. Возвращение на место откуда его удалили в автоматическом режиме поэтому не требуется.
 
А вот использование копирования вместо переноса, мысль очень здравая, полностью поддерживаю.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 18:02 29-10-2019
Sinclair83

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Falcon99
Да, похоже действительно неправильно понял.
Хорошо. Переделаю в ближайшее время.

Всего записей: 758 | Зарегистр. 07-01-2009 | Отправлено: 19:24 29-10-2019
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sinclair83, спасибо, буду ждать следующей версии.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 09:09 30-10-2019
Sinclair83

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Falcon99
Извините за такую задержку с ответом. Переделка не сложная, просто были некоторые обязательства перед другими участниками этого форума.
 
Теперь нужно передавать программе три параметра (все ялвляются обязательыми).
1 - каталог-источник, обязан существовать и не должен быть пустым. Иначе сообщение пользователю об ошибке и завершение.
2 - каталог-приёмник, не обязан существовать. В случае отсутствия будет произведена попытка его создать (если удалось, то программа тихо завершится. Дальше - дело robocopy). Если не удалось, то сообщение пользователю и выход. Если же приёмник найден, то запуск процесса его сканирования и дальнейшего сравнения с источником.
3 - временная папка, куда скопируются файлы из приёмника и которых нет в источнике(не обязана существовать, создастся автоматически при необходимости). Если разницы между источником и приёником нет, то тихое завершение программы. Дальше - дело robocopy. К слову, если в источнике файлов больше чем в приёмнике, НО при этом в приёмнике лежат все те файлы, что есть в источнике, то... ничего не произойдёт. Так как попросту нечего копировать. Дальше - дело robocopy. Ведь за эталон мы приняли именно приёмник! Поэтому идёт сравнение его с источником, а не наоборот(как может показаться после работы robocopy). Но если в приёмнике файлов больше, чем в источнике, то запуск процесса сканирования и дальнейшего сравнения (подтверждение предыдущего предложения).
 
Если в процессе возникли ошибки копирования файлов или воссоздания структуры каталогов во временной папке, то это будет отражено в файле-отчёте "dcmf.log". Который сформируется рядом с программой. Естественно об этом будет сообщено пользователю. Если ошибок не возникнет, то и отчёт не сформируется.
 
Если всё прошло гладко, то тихое завершение программы. Дальше - дело robocopy.
 
В программе также заморочился на предмет сравнения переданных пользователем полных путей (источника и приёмника). Они не должны быть равны, разумеется. Но и не должны иметь общего корня. Например, и источник и приёмник - сетевые ресурсы("\\Server\root\folder1" и "\\Server\root\folder2"). В этом случае корень для обоих каталогов является общим - "\\Server\root". Будет выдано соответствующее сообщение пользователю. Если же оба ресурса - локальные папки, то сравниваются подстроки до второго бэкслэша "\". Например, "d:\Документы\source" и "d:\Документы\target". И в этом случае корень также является общим - "d:\Документы", а следовательно ошибка.
 
Временная же папка не должна быть равна лишь пути приёмника. То есть возможен след. вариант (теоритически, не проверял):

Код:
dcmf.exe c:\xxx c:\yyy c:\xxx

в таком случае недостающие в источнике файлы будут в него скопированы из приёмника.
 
Попробуйте, пожалйуста эту версию. Надеюсь теперь это то, что было нужно.
Ссылка
 
P.S. Забыл сказать что с exitcodes не заморачивался по причине отсутствия в программе тихого режима. При сбойных ситуациях пользователь и так получит сообщение. Короче:
0    - всё хорошо или нет файлов для копирования(всё на месте).
-1   - во всех остальных случаях

Всего записей: 758 | Зарегистр. 07-01-2009 | Отправлено: 14:11 30-10-2019 | Исправлено: Sinclair83, 14:23 30-10-2019
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sinclair83
Забрал, к сожалению о тестировании могу написать только после праздников, маленький аврал. Судя по описанию, все что нужно.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 11:17 31-10-2019
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sinclair83
Прошу прощения что не написал вчера. Сегодня проверил работу утилиты dcmf. Все отработало как надо. Спасибо большое!

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 17:48 06-11-2019
Sinclair83

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Falcon99,
рад был помочь.
 
А чтобы этот пост не рассматривался как личная переписка, то спрошу у остальных здесь же:
Кто-нибудь использует GUI для robocopy? Смотрю в шапке "Robocopy GUI 3.1.2 (с версией XP026 в комплекте)". В частности интересует вопрос: нужен ли кому-нибудь ProgressBar? Это может быть интересно для тех, кому предстоит довольно долгий процесс копирования и кому хочется знать сколько процентов от задания выполнено на данный момент.
Сразу оговорюсь, что никакого ProgressBar'а для robocopy у меня нет. Это только некий мини-опрос. Может это вообще никому не нужно.  

Всего записей: 758 | Зарегистр. 07-01-2009 | Отправлено: 13:19 07-11-2019
clio77



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Утилита не умеет разбирать тип файлов? Во всяком случае ключа для копирования только необходимых типов файлов не нашел. Как построить пакетник разбирающий типы файлов задействуя утилиту?
 

Цитата:
robocopy "\\server\catalog\DB" "D:\DESINTATION\canalog\DB\folder"  /maxage:360

Всего записей: 2441 | Зарегистр. 27-10-2003 | Отправлено: 06:47 08-11-2019
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
clio77
Первые строчки help'a утилиты:

Код:
 Usage :: ROBOCOPY source destination [file [file]...] [options]
source :: Source Directory (drive:\path or \\server\share\path).
destination :: Destination Dir  (drive:\path or \\server\share\path).
file :: File(s) to copy  (names/wildcards: default is "*.*").

 
Укажите к качестве файлов нужную маску и получите то что вам надо.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 09:42 08-11-2019
clio77



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
robocopy "\\server\catalog\DB" "D:\DESINTATION\canalog\DB\folder"  /maxage:360 *.pdf*

спасибо за точный ответ.

Всего записей: 2441 | Зарегистр. 27-10-2003 | Отправлено: 20:26 08-11-2019 | Исправлено: clio77, 20:43 08-11-2019
shusler



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите сделать скрипт, чтобы перемещало из одной папки во вторую все подпапки и чтобы потом не удаляло исходную папку C:\Music\MOVE.
 
у меня вот такой скрипт, но думаю можно обойтись как-то иначе, без файлика 1.txt....
 

Код:
robocopy "C:\Music\MOVE" "E:\Music" /E /MOVE /V /NP /XF 1.txt /R:10 /W:30

 

Всего записей: 180 | Зарегистр. 30-10-2007 | Отправлено: 18:05 05-04-2020
Wadson

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Наткнулся на полезную утилиту, которая может из задания robocopy сделать службу.
Может, кому-то пригодится
 
NSSM - the Non-Sucking Service Manager

Всего записей: 784 | Зарегистр. 09-12-2002 | Отправлено: 10:40 20-03-2021
Kero1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
умеет ли прога изменить-синхронизировать время создания и изменения файлов если например создать копию каталога на другом диске ?
2 папки с абсолютно одинаковыми файлами но разным временем создания и изменения .
 
 файлы бинарно одинаковые , просто определить файлы (дубликаты) и просто задать им такие же даты как у источника.  Сами файлы не копировать, а  просто задать им такие же даты.

Всего записей: 2554 | Зарегистр. 23-08-2011 | Отправлено: 21:53 14-11-2021
Kero1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ладно , понятно что не умеет, может кто знает что умеет под вин32 (желательно xp)

Всего записей: 2554 | Зарегистр. 23-08-2011 | Отправлено: 20:40 17-11-2021
Abel11



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kero1 написал(а)
Цитата:
Сами файлы не копировать, а  просто задать им такие же даты.

На Windows 7 x64 работает - дата создания и дата модификации объектам из целевой папки устанавливается относительно атрибутов подобных объектов из папки источника.
 

Код:
robocopy "c:\SourceDir" "d:\TargetDir" /e /timfix /dcopy:t /copy:t


Всего записей: 1589 | Зарегистр. 08-12-2013 | Отправлено: 03:34 20-11-2021 | Исправлено: Abel11, 07:53 20-11-2021
Kero1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abel11
хехе, работает, а я уж думал - все молчат - наверно не может )

Всего записей: 2554 | Зарегистр. 23-08-2011 | Отправлено: 17:27 20-11-2021
captB0nd

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
niko7, обычно используют запуск задачи из под соответсвующего пользователя на локальной машине. То есть пользователь должен существовать и на данной машине с таким же именем и паролем.
Другой вариант это использовать команду net use

Получается, что пароль на пользователя, под которым надо войти на сетевой ресурс, будет храниться в открытом виде в батнике? Есть другое решение?
UPD. Мысль. Если запускать скрипт с сабжем по указанным сетевым ресурсам через планировщик заданий и уже там указывать доемнного пользователя в условиях выполнения - решение?

Всего записей: 19 | Зарегистр. 06-03-2015 | Отправлено: 12:05 06-07-2022 | Исправлено: captB0nd, 12:33 06-07-2022
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7

Компьютерный форум Ru.Board » Компьютеры » Программы » Robocopy


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru