Компьютерный форум 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=347479)

KamikadZZe 28-12-2020 23:27 2944488

Перемещение файлов за предыдущую дату в папку с датой и именем сервера и их архивация
 
Доброго времени суток!
Помогите с написанием батника.

Имеются сервера 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 2944513

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 2944552

Код:

@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 2944758

Уважаемые DJ Mogarych и Megaloman благодарю Вас за предложенные варианты решения моей задачи!
Цитата:

Цитата DJ Mogarych
Код: »

Цитата:

Цитата megaloman
Код: »

Оба варианта тестируются.
По
Цитата:

Цитата megaloman
Код: »

В архиве создается весь путь прописанный AllComp, что немного не устраивает.
Если путь С:\Pogram Files\XXX\XXX\XXX\log, то чтобы добраться до логов в архиве нужно открыть полный путь к логам в архиве.

С Новым Годом Вас!
Здоровья и всех благ!

megaloman 01-01-2021 21:51 2944762

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 2945920

Цитата:

Цитата megaloman
KamikadZZe, Не поленитесь почитать справку в winrar (справка-содержание-режим командной строки -ключи). Добавьте ключ -ep »

Спасибо! Буду теперь знать и учитывать в след задачах!

Благодарю за помощь всех кто откликнулся! Выручили, особенно перед НГ!


Время: 21:25.

Время: 21:25.
© OSzone.net 2001-