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

Показать сообщение отдельно

Ветеран


Contributor


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

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


Постановка задачи
Есть несколько серверов.

Серверы могут идентифицироваться как именами, например: Server1 Server2 ....
так и по IP, например 192.168.1.208 192.168.1.121 192.168.1.15 ...
либо в их комбинации

На каждом сервере имеется доступ к сетевой папке с определённым именем, например Log

На каждом сервере в указанной папке ежедневно создаются файлы имя.log, где хранятся лог-файлы за несколько дней,
например:
\\Server1\Log\2020-10-22.gw.uniroll.log ...2020-10-21.gw.uniroll.log ...2020-10-20.gw.uniroll.log
\\Server2\Log\2020-10-22.gw.uniroll.log ...2020-10-21.gw.uniroll.log ...2020-10-20.gw.uniroll.log
.......
итд.

Более старые файлы перемещаются в другое место в папку с именем сервера-источника, например:
\\Server\Backup\Server1\Log\2020-10-19.gw.uniroll.log ...2020-10-18.gw.uniroll.log ...
\\Server\Backup\Server2\Log\2020-10-19.gw.uniroll.log ...2020-10-18.gw.uniroll.log ...
.......
итд.

Задача: собрать определённый логфайл, например: 2020-10-21.gw.uniroll.log, с разных серверов,
на рабочем компьютере в папке, например: Z:\Box_Out в подпапке с именем лога.
В имя файла с логом добавляется имя сервера:
Z:\Box_Out\2020-10-21.gw.uniroll\2020-10-21.gw.uniroll_Server1.log
... 2020-10-21.gw.uniroll_Server2.log
...............
итд.

В зависимости от даты создания лога, лог может храниться как на конкретном сервере,
так и на сервере бэкапов в соответствующей серверу папке.

Полученную папку заархивировать
Вариант решения - к имени файлов добавляются имена серверов
Код: Выделить весь код
@Echo Off
	Call :Together "2020-10-22.gw.uniroll.log"
Exit /B

:Together
	Set "AllComp=Server1 Server2 Server3 Server4 Server5 Server6"
	Set "LogFolder=Log"

	Set "Backup=\\Server\Backup"
	Set "BoxOut=Z:\Box_Out"

	If Not Exist "%BoxOut%\%~n1" (
		Md "%BoxOut%\%~n1" ||(Echo Folder "%BoxOut%\%~n1" not created &Pause &Exit /B 1)
	)
	
	>nul 2>&1 (For %%c In (%AllComp%) Do (
		Copy "\\%%c\%LogFolder%\%~1" "%BoxOut%\%~n1\%~n1_%%c%~x1" ||(
		Copy "%Backup%\%%c\%~1" "%BoxOut%\%~n1\%~n1_%%c%~x1")
	))

	"C:\Program Files\WinRAR\WinRAR.exe" a -ep1 -hpPassword "%BoxOut%\%~nx1.rar" "%BoxOut%\%~n1\*.*"
Exit /B
Вариант с архиватором 7Z
Код: Выделить весь код
	"C:\Program Files\7-Zip\7zG.exe" a -pPassword "%BoxOut%\%~nx1.7Z" "%BoxOut%\%~n1\*.*"

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 24-10-2020 в 14:49.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:24, 23-10-2020 | #13