PDA

Показать полную графическую версию : [решено] Бэкап перед применением патча


Anonymоus
13-08-2010, 14:15
Доброго времени суток. Помогите реализовать скрипт - задача такая: есть некий игровой сервер - директория с файлами и кучей вложенных директорий. Есть к нему патчи, которые распространяются в виде архива с такими же вложенными директориями и файлами. Что нужно - делать бэкап перед применением каждого патча, чтобы можно было его откатить. Вручную смотреть, какие файлы изменятся не выход, там иногда до сотни файлов меняется. Делать бэкап директории с сервером полностью - тоже не выход, слишком много весит. Нужен скрипт, который просканирует обе директории - сервера и патча - со вложенными директориями и файлами, выдаст список заменяемых патчем файлов и сохранит резервные копии заменяемых файлов с сохранением структуры директорий. Ну и ещё, желательно, чтобы писались в лог добавленные файлы и папки, которых не было на сервере, но есть в патче.

gora
13-08-2010, 16:23
Anonymоus, попробуйте.
Из упрощений: предполагается, что в patch нет пустых папок и файлов без расширения (не захотелось с ними возиться). Папка backup пересоздается при запуске скрипта иначе в ней будет "каша" при запуске с разными патчами.@Echo Off
:: Кодировка файла Кириллица DOS (866). Лог файл содается в этой же кодировке
SetLocal enabledelayedexpansion
Set server=server
Set patch=patch
Set backup=backup
Set log=log.txt

RD /S/Q "%backup%" 1>Nul 2>Nul
MD "%backup%"
For /F "UseBackQ Delims=" %%I In (`Dir "%patch%" /S/B 2^>Nul`) Do Call :_copyF "%%I"
Echo Есть в %server%, помещены в %backup%:>%log%
Echo ===================================================>>%log%
Copy %log% + y%log% %log%>Nul
Echo.>>%log%
Echo Нет в %server%, добавлены из %patch%:>>%log%
Echo ===================================================>>%log%
Copy %log% + n%log% %log%>Nul
Echo.>>%log%
Del y%log% n%log%>Nul
Echo.
Pause
Exit

:_copyF
If "%~x1"=="" GoTo :EOF
Set nt=%~1
Set nt=!nt:*%patch%\=!
Set n1=%~nx1
Set nt1=!nt:%n1%=!
If Exist "%server%\%nt%" (
Echo %server%\%nt%>>y%log%
Echo %server%\%nt%
xCopy %server%\%nt% %backup%\%nt1%>Nul
) Else (
Echo %server%\%nt%>>n%log%
)
GoTo :EOF

Anonymоus
13-08-2010, 18:21
Большое спасибо, именно то, что нужно.




© OSzone.net 2001-2012