Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Копирование большого количества файлов по сети

Ответить
Настройки темы
CMD/BAT - [решено] Копирование большого количества файлов по сети

Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день, помогите пожалуйста с решением следующей задачки. Заранее прошу прощения, если уже были подобные вопросы, просьба кинуть ссылку или готовое решение, я искал и полностью похожей задачи не нашел.

Необходимо с одного ПК ископировать большое количество файлов (оснавная папка и подпапки) на другой ПК, находящийся в одной и той же сети (сетевой доступ между ПК есть).
Размер основной папки большой, чуть более 200Гб. Содержит большое количество подпапок и мелких файлов. Т.е. с папки C:\Distr\Files\подпапки копировать на другой ПК в C:\Distr\Files\подпапки
Копирование должно пройти быстро, в течении хотя бы 12 часов (этого будет достаточно). Но если возникнет необходимость повторного копирования, то копировать необходимо будет сделать только новые подпапки или файлы. Результат копирования, по возможности, лучше записать в лог, но без перечисления (т.к. боюсь это займет много времени и лог очень сильно вырастит), а как бы в процентном соотношении, что было скопировано всё в первом случае, и только новые файлы, во втором.

Отправлено: 10:54, 12-10-2020

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
robocopy /?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:26, 12-10-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


finderhd, Совсем недавно было решено
Можно сделать бат-файл, а можно и из командной строки
Код: Выделить весь код
Xcopy /D /Q /E /H /R /C /Y "\\192.168.100.23\Test1\*.*" "Z:\Box_Arc\"
Чтобы на экране отображался процесс, уберите /Q, но это слегка замедлит процесс
Цитата finderhd:
Результат копирования, по возможности, лучше записать в лог, но без перечисления »
А что Вы там хотите увидеть?
Как вариант, можно, например, выдавать время начала и окончания копирования подпапки в основной папке, без углубления внутрь иерархии.
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=\\192.168.100.23\Test1" 
	Set "BoxOut=Z:\Box_Arc\Test1"
	Set "LogFile=Z:\Box_Arc\%~nx0.log"

	>>"%LogFile%" 2>>&1 (
		Echo ==================================== %Date% %Time% "Start %~dpnx0"
		FOR /F "usebackq delims=" %%d IN (`2^>nul Dir /B /A:D "%BoxIn%"`) DO (
			Echo %Date% %Time% Begin XCopy "%BoxIn%\%%d"
			Xcopy /D /Q /E /H /R /C /Y "%BoxIn%\%%d\*.*" "%BoxOut%\%%d\"
			Echo %Date% %Time%   End XCopy "%BoxIn%\%%d"
			Echo.
		)
	)
pause
Exit /B
При многократном запуске батников уже скопированные файлы повторно копироваться не будут, если в источнике копирования они не были изменены.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 12-10-2020 в 17:02.


Отправлено: 16:12, 12-10-2020 | #3


Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
А что Вы там хотите увидеть? »
Чтобы убедиться, что все файлы были скопированы.

Цитата megaloman:
При многократном запуске батников уже скопированные файлы повторно копироваться не будут, если в источнике копирования они не были изменены. »
Немного упустил этот момент, прошу прощения. Какие-то из файлов - постоянные и не меняются, но есть и файлы, которые будут меняться. В них в конце каждого дня дописывается информация, поэтому они будут меняться.

Например.

Запустили батник, который в определенную дату скопировал всё содержимое в каталог C:\Distr\Files\
Связано это с переездом данных с одного ПК на другой. На следующий день выяснилось, что переезда как такового осуществляться не будет и будет он неизвестно когда, а файлы уже обновились. Замечу, что имена файлов не меняются, меняется только их состав (дата, а именно признак "Изменен" обновляется каждый день).

Я так понимаю, в любом случае этот скрипт должен для таких условий подойти?

В принципе, батник будет запускаться через шедулер, по расписанию, и там можно посмотреть, сколько задача работала по времени, поэтому наверное время можно и убрать, если это нагружает работу скрипта?

Отправлено: 17:19, 12-10-2020 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата finderhd:
Чтобы убедиться, что все файлы были скопированы. »
Тогда и писать в лог нужно все каталоги и файлы.

Отправлено: 19:03, 12-10-2020 | #5


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Iska, Не обязательно. Можно запустить батник с xcopy несколько раз c ключом /D и, при отсутствии аварийных сообщений при работе, сообщение о том, что скопировано 0 файлов позволит убедиться, что все файлы скопированы.
Можно еще сравнить суммарный объем папок ...
А при большом количестве писать в лог все каталоги и файлы контрпродуктивно, визуально убедиться, что все файлы скопированы, нельзя.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 19:15, 12-10-2020 | #6


Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
А при большом количестве писать в лог все каталоги и файлы контрпродуктивно, визуально убедиться, что все файлы скопированы, нельзя. »
Я уже видел работу таких скриптов, там лог настолько разрастается, что просто жуть, да и само копирование из-за этого происходит медленно.

Цитата megaloman:
сообщение о том, что скопировано 0 файлов позволит убедиться, что все файлы скопированы. »
Я думаю этого было бы достаточно. Т.к. потом можно просто взять и сравнить по количеству файлов и папок. Правда файлов настолько много (несколько миллионов), что стандартным способом посмотреть их количество будет сжирать оперативу влет (уже проходил через это, пришлось потом чистить память мапколлектом). Но есть другие способы увидеть количество файлов и папок, с помощью определенной утилиты, которая памяти столько не жрет, поэтому посмотреть количество там и там, в принципе не проблема. Вышеуказанный скрипт будет выводить число скопированных файлов в лог?

Еще уточнение такое, что количество папок всегда одинаковое, меняются только определенные файлы. В них дописывается техническая информация ежедневно.

Отправлено: 09:49, 15-10-2020 | #7


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


finderhd, я Вам предоставил вариант, попробуйте хоть на каких-нибудь тестовых данных, уверен, увидите ответы на свои вопросы

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 16:28, 15-10-2020 | #8


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата finderhd:
…да и само копирование из-за этого происходит медленно. »
В правильно реализованных — не происходит.

Отправлено: 07:07, 16-10-2020 | #9


Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
я Вам предоставил вариант, попробуйте хоть на каких-нибудь тестовых данных, уверен, увидите ответы на свои вопросы »
Проверил на тестовой папке. Батник скопировал только папки и файлы внутри них, но файлы, которые лежали в корневой исходной папке (Test1), он не скопировал. И лучше наверное все-таки убрать возможность записи в лог. А то на 2 млн файлов он там много чего напишет в лог. Эта информация лишняя, я лучше с помощью утилиты посмотрю количество файлов в исходнике и там, куда они скопировались.
И еще заметил, что если запускать батник через планировщик задач, а именно так и нужно будет (во внерабочее время) то в History не видно, что он отработал (нет записи Task Completed, только Action Started), как будто он до сих пор висит в памяти. Пришлось задачу остановить вручную через End, и тогда запись Task Completed появилась.

Последний раз редактировалось finderhd, 11-11-2020 в 10:52.


Отправлено: 10:40, 11-11-2020 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Копирование большого количества файлов по сети

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Проблема с просмотром большого количества файлов в explorer Pikki-pikki Microsoft Windows 2000/XP 8 30-05-2021 00:24
CMD/BAT - [решено] Удаление большого количества папок и файлов finderhd Скриптовые языки администрирования Windows 50 12-10-2020 10:17
Система - [решено] проверка целостности большого количества файлов daneeall Программное обеспечение Windows 7 08-02-2013 16:25
2008 R2 - Подвисает копирование файлов большого объема из сети ujin Windows Server 2008/2008 R2 2 07-10-2010 12:57
Интерфейс - [решено] Переименование большого количества файлов 7human7 Microsoft Windows 2000/XP 7 22-11-2008 09:48




 
Переход