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

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

Ответить
Настройки темы
CMD/BAT - Копирование только измененных файлов + контрольная сумма

Пользователь


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

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


Доброго всем времени суток. Помогите с написанием скрипта, так как нужные (для задачи) команды на просторах интернета не нашел.
Задача такова:
Есть папка "SHARE" и папка "SHARE-ARC".
Папка "SAHRE" - постоянно каждый день наполняется данными, изменяется. Соответственно папка "SHARE-ARC" - это ее копия, и сервер каждый вечер должен брать все измененные файлы из "SAHRE" и копировать в "SHARE-ARC".
Загвоздка вот в чем. Если в папке "SAHRE" какой-то файл изменился, но имя осталось прежним - он должен копироваться в папку "SHARE-ARC" рядом со своим первым файлом под именем .....(1). А файлы, которые один в один соответствуют - не копировать, дабы не занимать на это время и ресурсы. Файлы которые в структуре появились новые - копировать. Такое инкрементное копирование получается, но с дополнительным содержанием измененных файлов.
xcopy полагаю тут не очень поможет...

Отправлено: 18:06, 12-07-2023

 

Ветеран


Contributor


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

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


Вложения
Тип файла: zip я230801.bat.zip
(743 байт, 1 просмотров)

Вариант с подпапками и исключениями
Код: Выделить весь код
@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
Благодарности: 1

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


Проверил. Вроде отрабатывает. Единственное - это не копирует пустые каталоги. И еще можно сделать, чтобы выводил в cmd что делает? Паузу я так понимаю, можно просто закомментировать.

Отправлено: 12:56, 01-08-2023 | #12


Ветеран


Contributor


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

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


Вложения
Тип файла: zip я23080113.bat.zip
(831 байт, 1 просмотров)

Цитата Skylear:
не копирует пустые каталоги. И еще можно сделать, чтобы выводил в cmd что делает? »
Чем дальше в лес, тем толще партизаны. Структурв воспроизводится. 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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] При копировании файла изменяется контрольная сумма 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




 
Переход