|
Компьютерный форум 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 |
Ветеран Сообщения: 2723
|
Профиль | Отправить PM | Цитировать Вариант с подпапками и исключениями
@Echo Off &Cls Set "DirIn=Z:\У попа была собака" Set "DirOut=Z:\Поп ее любил" Set Exclude="\Она съела\Кусок мяса\" "\Он её убил\" If Not Exist "%DirIn%\" (Echo !!! Folder "%DirIn%" not found &Pause &Exit /B 2) Pushd "%DirOut%" ||(Echo !!! Folder "%DirOut%" not found &Pause &Exit /B 2) >"~~~Exclude" (For %%d In (%Exclude%) Do Echo %%~d) For /F "usebackq delims=" %%f In (`2^>nul xcopy /EXCLUDE:~~~Exclude /D /S /Y /L /F "%DirIn%\*.*" "%DirOut%\" ^| Find "\"`) Do ( Set "Out=%%f" (Call Set Out=%%Out: -^> =?%%) For /F "usebackq tokens=1,2 delims=?" %%i In (`Call Echo %%Out%%`) Do ( Echo "%%i" "%%j" If Not Exist "%%j" (>nul Xcopy /Y /F "%%i" "%%~dpj" ) Else (Call :CopyNum "%%i" "%%j") ) ) Del ~~~Exclude Popd Pause Exit /B 0 :CopyNum Set /A i=1 :Begin Set "Add=(%i%)" If Not Exist "%~dpn2%Add%%~x2" ( >nul Ren %2 "%~n1%Add%%~x1" >nul copy %1 "%~dp2" Exit /B ) Set /A i+=1 GoTo :Begin Exit /B |
------- Отправлено: 08:44, 01-08-2023 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать Проверил. Вроде отрабатывает. Единственное - это не копирует пустые каталоги. И еще можно сделать, чтобы выводил в cmd что делает? Паузу я так понимаю, можно просто закомментировать.
|
Отправлено: 12:56, 01-08-2023 | #12 |
Ветеран Сообщения: 2723
|
Профиль | Отправить PM | Цитировать Цитата Skylear:
Чем дальше в лес, тем толще партизаны. Структурв воспроизводится. Log-файл ведётся
@Echo Off &Cls Set "DirIn=Z:\У попа была собака" Set "DirOut=Z:\Поп ее любил" Set Exclude="\Она съела\Кусок мяса\" "\Он её убил\" Set "Log=%DirOut%\~~~%~nx0.log" If Not Exist "%DirIn%\" (Echo !!! Folder "%DirIn%" not found &Pause &Exit /B 2) Pushd "%DirOut%" ||(Echo !!! Folder "%DirOut%" not found &Pause &Exit /B 2) >"~~~Exclude" (For %%d In (%Exclude%) Do Echo %%~d) xcopy /EXCLUDE:~~~Exclude /T /E /Y "%DirIn%\*.*" "%DirOut%\" >>"%Log%" Echo +++ %Date% %Time% For /F "usebackq delims=" %%f In (`2^>nul xcopy /EXCLUDE:~~~Exclude /D /S /Y /L /F "%DirIn%\*.*" "%DirOut%\" ^| Find "\"`) Do ( Set "Out=%%f" (Call Set Out=%%Out: -^> =?%%) For /F "usebackq tokens=1,2 delims=?" %%i In (`Call Echo %%Out%%`) Do ( Echo "%%i" "%%j" If Not Exist "%%j" ( >nul Xcopy /Y /F "%%i" "%%~dpj" &>>"%Log%" Echo "%%i" -^> "%%~dpj" ) Else (Call :CopyNum "%%i" "%%j") ) ) Del ~~~Exclude Popd Pause Exit /B 0 :CopyNum Set /A i=1 :Begin Set "Add=(%i%)" If Not Exist "%~dpn2%Add%%~x2" ( >nul Ren %2 "%~n1%Add%%~x1" &>>"%Log%" Echo === %2 -^> "%~n1%Add%%~x1" >nul copy %1 %2 &>>"%Log%" Echo %1 -^> %2 Exit /B ) Set /A i+=1 GoTo :Begin Exit /B |
|
------- Отправлено: 15:22, 01-08-2023 | #13 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] При копировании файла изменяется контрольная сумма | 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 |
|