![]() |
Копирование большого количества файлов по сети
Добрый день, помогите пожалуйста с решением следующей задачки. Заранее прошу прощения, если уже были подобные вопросы, просьба кинуть ссылку или готовое решение, я искал и полностью похожей задачи не нашел.
Необходимо с одного ПК ископировать большое количество файлов (оснавная папка и подпапки) на другой ПК, находящийся в одной и той же сети (сетевой доступ между ПК есть). Размер основной папки большой, чуть более 200Гб. Содержит большое количество подпапок и мелких файлов. Т.е. с папки C:\Distr\Files\подпапки копировать на другой ПК в C:\Distr\Files\подпапки Копирование должно пройти быстро, в течении хотя бы 12 часов (этого будет достаточно). Но если возникнет необходимость повторного копирования, то копировать необходимо будет сделать только новые подпапки или файлы. Результат копирования, по возможности, лучше записать в лог, но без перечисления (т.к. боюсь это займет много времени и лог очень сильно вырастит), а как бы в процентном соотношении, что было скопировано всё в первом случае, и только новые файлы, во втором. |
Код:
robocopy /? |
finderhd, Совсем недавно было решено
Можно сделать бат-файл, а можно и из командной строки
Код:
Xcopy /D /Q /E /H /R /C /Y "\\192.168.100.23\Test1\*.*" "Z:\Box_Arc\" Цитата:
Как вариант, можно, например, выдавать время начала и окончания копирования подпапки в основной папке, без углубления внутрь иерархии.
Код:
@Echo Off |
Цитата:
Цитата:
Например. Запустили батник, который в определенную дату скопировал всё содержимое в каталог C:\Distr\Files\ Связано это с переездом данных с одного ПК на другой. На следующий день выяснилось, что переезда как такового осуществляться не будет и будет он неизвестно когда, а файлы уже обновились. Замечу, что имена файлов не меняются, меняется только их состав (дата, а именно признак "Изменен" обновляется каждый день). Я так понимаю, в любом случае этот скрипт должен для таких условий подойти? В принципе, батник будет запускаться через шедулер, по расписанию, и там можно посмотреть, сколько задача работала по времени, поэтому наверное время можно и убрать, если это нагружает работу скрипта? |
Цитата:
|
Iska, Не обязательно. Можно запустить батник с xcopy несколько раз c ключом /D и, при отсутствии аварийных сообщений при работе, сообщение о том, что скопировано 0 файлов позволит убедиться, что все файлы скопированы.
Можно еще сравнить суммарный объем папок ... А при большом количестве писать в лог все каталоги и файлы контрпродуктивно, визуально убедиться, что все файлы скопированы, нельзя. |
Цитата:
Цитата:
Еще уточнение такое, что количество папок всегда одинаковое, меняются только определенные файлы. В них дописывается техническая информация ежедневно. |
finderhd, я Вам предоставил вариант, попробуйте хоть на каких-нибудь тестовых данных, уверен, увидите ответы на свои вопросы
|
Цитата:
|
Цитата:
И еще заметил, что если запускать батник через планировщик задач, а именно так и нужно будет (во внерабочее время) то в History не видно, что он отработал (нет записи Task Completed, только Action Started), как будто он до сих пор висит в памяти. Пришлось задачу остановить вручную через End, и тогда запись Task Completed появилась. |
finderhd, Не прошло и полгода :)
И в самом деле, в корне папки Test1 файлы не копируются - моё недомыслие. Добавил это копирование: Код:
@Echo Off Цитата:
Код:
@Echo Off Код:
@Echo Off Цитата:
Rem Pause Надеюсь, Ваша реакция последует несколько раньше, чем Новый Год :) |
Цитата:
|
Цитата:
Согласен с Вами, альтернатива замечательная, спасибо, проверю этот вариант в самое ближайшее время и отпишусь о результатах. |
Попробовал альтернативный способ - ничего не произошло. Если батник запускать из консоли, то ничего не происходит, но лог создается
В логе следующие записи: File not found - *.* 0 File(s) copied И еще вопрос - можно ли сделать так, чтобы атрибуты по дате создания каталогов, как в случае файлов (с файлами в этом плане всё нормально), сохранялись, а не отображались датой запуска батника? |
finderhd, У Вас неверно указан исходный путь. Переименуйте Ваш батник в файл с расширением .txt и приложите к сообщению.
Вот вариант с проверкой существования исходного пути. Код:
@Echo Off Вот пример моего Log-файла
Цитата:
При втором запуске ничего не скопировалось, так как всё уже было скопировано. В третем случае я нарочно указал неверную папку - получил сообщение как у Вас File not found - *.* 0 File(s) copied Так что неча на зеркало пенять :) Цитата:
|
Цитата:
Цитата:
В любом случае, теперь всё работает, спасибо! |
Заметил еще один момент. В папку назначения копируются только вложенные папки, а исходная, которая указывается в батнике (Test1) не копируется, если её не указать в назначении, это не совсем удобно, если нужно выборочное копирование.
Т.е. можно к примеру сделать так, чтобы в папке назначения не указывать имя копируемого каталога? Set "BoxIn=\\192.168.100.23\Test1" Set "BoxOut=Z:\Box_Arc\ |
Цитата:
Код:
@Echo Off Код:
@Echo Off \\192.168.100.23\Дискета_от_книги\Chapter05\ с подпапками, естественно, попадёт в Z:\Box_Arc\Test1\Дискета_от_книги\Chapter05 Папка при отсутствии будет создана. Можно сделать так: Код:
Set "FromServer=E:" Можно эдак: Код:
Set "FromServer=E:\Тестовые_сетевые_папки" А можно вообще извратиться, например, для копирования с разных серверов в одну папку с идентификацией сервера в копии Код:
Set "FromServer=\" |
megaloman,
Доброго дня. Оставил самый простой вариант, без лога, который Код:
@Echo Off Все отлично скопировалось. Но к задаче добавилось условие для некоторых других папок. Т.е. их как то выделять или добавлять отдельно в бат файл не нужно, я просто их сам укажу. Как с них по такому же сценарию скопировать файлы, но в зависимости от даты создания? Например, чтобы скопировались только файлы, созданные за последний месяц, год и т.д. в количестве дней, подскажите пожалуйста. |
finderhd, Для xcopy
Цитата:
Код:
@Echo Off Здесь указываем число дней для пересчета текущей даты ("-" назад). Наверное можно то же сделать посредством forfiles. |
Время: 19:24. |
Время: 19:24.
© OSzone.net 2001-