|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Копирование только измененных файлов + контрольная сумма |
|
|
CMD/BAT - Копирование только измененных файлов + контрольная сумма
|
Пользователь Сообщения: 52 |
Профиль | Отправить PM | Цитировать Доброго всем времени суток. Помогите с написанием скрипта, так как нужные (для задачи) команды на просторах интернета не нашел.
Задача такова: Есть папка "SHARE" и папка "SHARE-ARC". Папка "SAHRE" - постоянно каждый день наполняется данными, изменяется. Соответственно папка "SHARE-ARC" - это ее копия, и сервер каждый вечер должен брать все измененные файлы из "SAHRE" и копировать в "SHARE-ARC". Загвоздка вот в чем. Если в папке "SAHRE" какой-то файл изменился, но имя осталось прежним - он должен копироваться в папку "SHARE-ARC" рядом со своим первым файлом под именем .....(1). А файлы, которые один в один соответствуют - не копировать, дабы не занимать на это время и ресурсы. Файлы которые в структуре появились новые - копировать. Такое инкрементное копирование получается, но с дополнительным содержанием измененных файлов. xcopy полагаю тут не очень поможет... |
|
Отправлено: 18:06, 12-07-2023 |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать Полагаю вот такой вариант решает проблему частично. Пропускает файлы, если они не изменены, и заменяет, если были изменены.
А нужно создавать рядом, если были изменены. Такого что-то не найду в синтаксисе... |
Отправлено: 19:12, 12-07-2023 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2723
|
Профиль | Отправить PM | Цитировать @Echo Off &Cls Set "DirIn=Z:\SAHRE" Set "DirOut=Z:\SHARE-ARC" For /F "usebackq delims=" %%f In (`2^>nul xcopy /D /Y /L "%DirIn%\*.*" "%DirOut%\"`) Do ( If Exist "%%f" ( If Not Exist "%DirOut%\%%~nxf" ( >nul copy "%DirIn%\%%~nxf" "%DirOut%\" ) Else ( Call :CopyNum "%%f" ) ) ) Exit /B 0 :CopyNum Set /A i=1 :Begin Set "Add=(%i%)" If Not Exist "%DirOut%\%~n1%Add%%~x1" (>nul Copy %1 "%DirOut%\%~n1%Add%%~x1" &Exit /B) Set /A i+=1 GoTo :Begin Exit /B |
------- Отправлено: 23:13, 12-07-2023 | #3 |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать Проверил. Батник не отрабатывает. Может где-то ошибка((( окно быстро пропадает, пробовал и от админа и просто
|
Отправлено: 17:30, 13-07-2023 | #4 |
Ветеран Сообщения: 2723
|
Профиль | Отправить PM | Цитировать Цитата Skylear:
Цитата Skylear:
@Echo Off &rem Cls Set "DirIn=\\192.168.100.23\Test1" Set "DirOut=\\192.168.100.23\Test2" If Not Exist "%DirIn%\" (Echo !!! Folder "%DirIn%" not found &Pause &Exit /B 2) If Not Exist "%DirOut%\" (Echo !!! Folder "%DirOut%" not found &Pause &Exit /B 2) For /F "usebackq delims=" %%f In (`2^>nul xcopy /D /Y /L "%DirIn%\*.*" "%DirOut%\"`) Do ( Echo %%f If Exist "%%f" ( If Not Exist "%DirOut%\%%~nxf" (>nul copy "%DirIn%\%%~nxf" "%DirOut%\" ) Else (Call :CopyNum "%%f") ) ) Exit /B 0 :CopyNum Set /A i=1 :Begin Set "Add=(%i%)" If Not Exist "%DirOut%\%~n1%Add%%~x1" ( >nul Ren "%DirOut%\%~nx1" "%~n1%Add%%~x1" >nul copy "%DirIn%\%~nx1" "%DirOut%\" Exit /B ) Set /A i+=1 GoTo :Begin Exit /B |
|||
------- Отправлено: 19:19, 13-07-2023 | #5 |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать хм.... вообще не отрабатывает((
Пути локальные, а не сетевые. и как старый будет добавляться под номером? все время переименовываться??? не совсем понимаю. Схема такая: Люди работают в шаре, например, один человек сегодня сделал файл-документ, а завтра его изменил и пересохранил. Так вот зеркальная шара для этого и нужна - чтобы иметь и сегодняшний документ и вчерашний. Так как они могут отличаться. И сервер отрабатывает скрипт - и собирает измененные файлы с первой шары во вторую, но получается должен при совпадении имени, но разной дате создания - сохранять его рядом, а старый файл со вчера уже лежит и его незачем переименовывать |
Отправлено: 19:33, 13-07-2023 | #6 |
Ветеран Сообщения: 2723
|
Профиль | Отправить PM | Цитировать Цитата Skylear:
Отрабатывает, и неважно, какой путь, лишь бы реальный. Что-то Вы извратили Берите новую версию батника, там контроль наличия путей Цитата Skylear:
file.txt Пользователь у себя его изменил При копировании в архив старый файл станет с номером (1) а новый сохранит имя, итого получим: file.txt file(1).txt Пользователь снова изменил файл. При копировании в архив старый файл станет с номером (2) а новый сохранит имя, итого получим: file.txt file(1).txt file(2).txt Максимальный номер соответствует предпоследней версии файла Иначе как сравнивать по датам файл у пользователя и файл в архиве, если имена будут разные. Можно сделать, но это многократно медленнее. Стандартные команды, например, xcopy, сравнивают только одноименные файлы |
||
------- Последний раз редактировалось megaloman, 13-07-2023 в 20:00. Отправлено: 19:53, 13-07-2023 | #7 |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать да, алгоритм записан верно.
батник делаю из txt, кодировка 866, акельпадом редактирую, тестировал на разных путях (в том числе с русскими символами). В батник просто нужно записать пропуск определенных папок еще, я изначально делал на robocopy (там есть пропуск папок). скрипт на robocopy такой (тоже 866): файлик также прикладываю |
Отправлено: 21:47, 19-07-2023 | #8 |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать Ребята, нет ни у кого идей?
|
Отправлено: 22:14, 31-07-2023 | #9 |
Ветеран Сообщения: 2723
|
Профиль | Отправить PM | Цитировать Skylear, Обратите внимание на положение кавычек в моём коде и в Вашем
Прикрепляю батник в нужной кодировке. Вы не указывали в постановке, что в исходной папке содержатся не только файлы, но и подпапки, да еще некоторые надо пропускать. Это уже несколько иная задача. Предложенный код на это не расчитан.
|
------- Отправлено: 07:03, 01-08-2023 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] При копировании файла изменяется контрольная сумма | Bingo111 | Непонятные проблемы с Железом | 5 | 14-09-2021 16:34 | |
VBS/WSH/JS - Копирование только новых файлов | Serg2010 | Скриптовые языки администрирования Windows | 0 | 02-12-2017 22:51 | |
CMD/BAT - [решено] Копирование измененных фалов+логи | dahiko | Скриптовые языки администрирования Windows | 9 | 23-02-2016 16:45 | |
Вопрос - теневое копирование измененных данных+защита от удаления. | 9112 | Защита компьютерных систем | 3 | 20-10-2010 19:38 | |
HDD - Неверная контрольная сумма ATA | vzh11 | Накопители (SSD, HDD, USB Flash) | 4 | 27-03-2009 17:28 |
|