Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Бэкап перед применением патча (http://forum.oszone.net/showthread.php?t=182844)

Anonymоus 13-08-2010 14:15 1472883

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

gora 13-08-2010 16:23 1472973

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 1473084

Большое спасибо, именно то, что нужно.


Время: 01:38.

Время: 01:38.
© OSzone.net 2001-