Показать полную графическую версию : [решено] Перемещение файлов за предыдущую дату в папку с датой и именем сервера и их архивация
KamikadZZe
28-12-2020, 23:27
Доброго времени суток!
Помогите с написанием батника.
Имеются сервера Server 1, Server 2 ...,
И Server Backup
На Server 1, Server 2 ..., пишутся почасовые логи типа YYYY-MM-DD-NN.log (где YYYY - год; MM - месяц; DD - день; NN - число (время: 00; 01; 02; 03 ...23) ).
Т.к. данные файлы занимают много места (за 1 час в среднем 1,3 гБ) хотел создать задание по расписанию, чтобы раз в сутки (с наступлением след. дня) запускалось задние на перенос этих
файлов YYYY-MM-DD-NN.log (Думаю подойдет перенос всейх файлов за вчерашнюю дату) с Server 1, Server 2 ..., на Server Backup в папку с датой создания файлов YYYY-MM-DD+Имя Сервера (Server 1, Server 2 ...).
После создания папки и переноса с файлов необходимо произвести архивацию папки вместе с файлами с последующим удалением папки с файлами.
Заранее благодарен за помощь!
DJ Mogarych
29-12-2020, 10:27
Powershell:
$hosts = "server1","server2","server3"
Invoke-Command -computername $hosts -command {
$yesterday = ((get-date).AddDays(-1)).ToString("yyyy-MM-dd")
$files = dir C:\temp\test |? name -match "^$yesterday"
$files |Compress-Archive -DestinationPath "C:\temp\test2\$yesterday-$($env:computername).zip"
if ($?) {$files |del}
}
Здесь с сервера бэкапа запускается удалённая команда на серверах, перечисленных в $hosts, и каждый сервер сам занимается архивацией, это работает гораздо быстрее.
Требования к выполнению - Powershell v4 и новее (иначе придётся использовать 7-zip вместо Compress-Archive), работающий удалённый доступ для Powershell (настраивается командой winrm -qc) и соответствующие права на каталог с архивами для пользователя, под которым будет запускаться скрипт.
В примере конечный каталог - это C:\temp\test2, его нужно заменить на сетевой путь к шаре на сервере бэкапа.
megaloman
29-12-2020, 18:08
@Echo Off
cls
Set "AllComp="\\127.0.0.1\Test1" "\\LocalHost\Test2" "\\192.168.100.23\Test1\Every Day""
Set "Backup=\\192.168.100.23\Test2\Rar For Every Day"
For %%p In (%AllComp%) Do FOR /F "tokens=1 delims=\" %%s IN (%%p) DO Call :ArcPrc "%%~s" "%%~p"
pause
Exit /B
:ArcPrc
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "ToDay=%%d" &Call Set "ToDay=%%ToDay:~0,4%%-%%ToDay:~4,2%%-%%ToDay:~6,2%%"
FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /B /A:-D /O:N "%~2\20??-??-??-*.log"^|FINDSTR /B /I /V /R /C:"%ToDay%"`) DO (
If Exist "%~2\%%~f" (
Set "Name=%%f"
rem Call "C:\Program Files\WinRAR\Rar.exe" a -df -m1 "%Backup%\%%Name:~0,10%%-%~1.rar" "%~2\%%Name:~0,10%%-*.log"
Call "C:\Program Files\WinRAR\Rar.exe" a -df -m1 -ep "%Backup%\%%Name:~0,10%%-%~1.rar" "%~2\%%Name:~0,10%%-*.log"
))
Exit /B
В переменной AllComp перечислены сетевые пути к логам на серверах, Backup - путь, где хранятся упакованные архивы для каждого дня каждого сервера. При наличии логов за несколько дней они будут архивироваться в файл каждого дня
KamikadZZe
01-01-2021, 20:45
Уважаемые DJ Mogarych и Megaloman благодарю Вас за предложенные варианты решения моей задачи!Код: »
Код: »
Оба варианта тестируются.
По Код: »
В архиве создается весь путь прописанный AllComp, что немного не устраивает.
Если путь С:\Pogram Files\XXX\XXX\XXX\log, то чтобы добраться до логов в архиве нужно открыть полный путь к логам в архиве.
С Новым Годом Вас!
Здоровья и всех благ!
megaloman
01-01-2021, 21:51
KamikadZZe, Не поленитесь почитать справку в winrar (справка-содержание-режим командной строки -ключи). Добавьте ключ -ep Call "C:\Program Files\WinRAR\Rar.exe" a -df -m1 -ep "%Backup%\%%Name:~0,10%%-%~1.rar" "%~2\%%Name:~0,10%%-*.log"
KamikadZZe
12-01-2021, 18:58
KamikadZZe, Не поленитесь почитать справку в winrar (справка-содержание-режим командной строки -ключи). Добавьте ключ -ep »
Спасибо! Буду теперь знать и учитывать в след задачах!
Благодарю за помощь всех кто откликнулся! Выручили, особенно перед НГ!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.