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

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

KamikadZZe 20-10-2020 13:16 2936973

Копирование файлов с одинаковым именем с разных ПК или с backup архива
 
Доброго времени суток!

Есть несколько ПК. В моем случае их пока 6. На них запущена одна и та же программа. Программа ведет логирование в папку log на каждом ПК.
Все логи на 6-ти ПК имеют одно и тоже название. Кроме того, логи старше нескольких дней перекидываются в backup архив на другой ПК, который служит для хранения логов (Backup).
На Backup логи в архиве хранятся в папке с именем ПК

Т.к. бывает необходимо найти лог с определенным именем на всех ПК или на Backup и собрать их в папку (папка с названием лога) для проверки или передачи:

Прошу помощи в написании bat-ника для поиска файлов с определенным именем (одинаковое имя файла) на разных ПК, а если их в папках на ПК нет, то поиск в backup архивах с этих ПК и извлечении данных файлов в папку с названием лога.
Т.к. данные файлы носят одинаковое имя, то необходимо их нумеровать (имя файла_001, имя файла_002 и т.д.) или же дописывать к имени файла имя ПК.

Elven 20-10-2020 15:08 2936989

Код:

@echo off

set fname=log.txt
FOR /F %%I IN ("comp1 comp2 comp3 backup") DO (
        pushd \\%%I\logs
        FOR /F "delims=" %%F IN ('dir /b /s /a:-d %fname%') DO (
                echo copy "%%F" "d:\localfolder\%%~nF-%%I%%~xF"
        )
        popd
)


YuS_2 20-10-2020 16:36 2937000

Цитата:

Цитата Elven
podp »

Код:

popd

Elven 20-10-2020 17:32 2937008

YuS_2, спасибо, исправил. Плохо когда под рукой нету компа с виндой.

megaloman 20-10-2020 20:52 2937036

Код:

@Echo Off
        Set "AllComp=Comp1 Comp2 Comp3 Comp4 Comp5 Comp6"
        Set "LogFolder=Log"
        Set "LogFile=logfile.txt"
        Set "Backup=\\Server\Backup"
        Set "BoxOut=Z:\Box_Out"
       
        >nul 2>&1 (For %%c In (%AllComp%) Do (
                Copy "\\%%c\%LogFolder%\%LogFile%" "%BoxOut%\%%c_%LogFile%" ||(
                        If Not Exist "%BoxOut%\%%c_%LogFile%" (
                                Copy "%Backup%\%%c\%LogFile%" "%BoxOut%\%%c_%LogFile%"
                        ) Else (
                                Xcopy /Y /D "%Backup%\%%c\%LogFile%" "%BoxOut%\%%c_%LogFile%"
                        )
                )
        ))
Exit /B

Elven, У Вас не решена ветка алгоритма
Цитата:

Цитата KamikadZZe
логи старше нескольких дней перекидываются в backup архив на другой ПК, который служит для хранения логов (Backup).
На Backup логи в архиве хранятся в папке с именем ПК
.... если их в папках на ПК нет, то поиск в backup архивах с этих ПК и извлечении данных файлов в папку с названием лога. »


KamikadZZe 20-10-2020 21:20 2937043

Цитата:

Цитата Elven
@echo off
set fname=log.txt
FOR /F %%I IN ("comp1 comp2 comp3 backup") DO (
pushd \\%%I\logs
FOR /F "delims=" %%F IN ('dir /b /s /a:-d %fname%') DO (
echo copy "%%F" "d:\localfolder\%%~nF-%%I%%~xF"
)
popd
) »

При выполнении кода вида:
set fname=2020-10-05.gw.uniroll.log
FOR /F %%I IN ("\\127.0.0.1\c$\Test") DO (
pushd %%I\1
FOR /F "delims=" %%F IN ('dir /b /s /a:-d %fname%') DO (
echo copy "%%F" "d:\Backup\files\%%~nF-%%I%%~xF"
)
popd
) > 5.txt

Получаю след результат:
Z:\Test\1>(echo copy "Z:\Test\1\2020-10-05.gw.uniroll.log" "d:\Backup\files\2020-10-05.gw.uniroll-\\127.0.0.1\c$\Test.log" )
copy "Z:\Test\1\2020-10-05.gw.uniroll.log" "d:\Backup\files\2020-10-05.gw.uniroll-\\127.0.0.1\c$\Test.log"

Это не совсем то что мне нужно, да и файл не копируется.

Написал часть кода по копированию, но не совсем получилось что хотел.
Получается что копирует файл и тут же его перезаписывает.
Посмотрите пожалуйста что я не так сделал?!

Сам код:
@Echo on
path c:\windows\system32

etLocal EnableDelayedExpansion

Set sourcedir0=\\127.0.0.1\c$\Test\1
Set destdir=\\127.0.0.1\d$\Backup\files
Set files=2020-10-05.gw.uniroll


call :SUB0001



:SUB0001
for %%F in (%files%) do (for /L %%N in (6,-1,1) do (if %%N LEQ 9 (set NN=00%%N) else set NN=%%N))
For /F "Tokens=1" %%a In ('dir /A:-D /T:C /O:D "%sourcedir0%\*.*" ^| Findstr /E /c:"%files%"') Do (
if not exist %files%_%NN%.log md "%destdir%\%files%
)
xcopy /chkqr %sourcedir0%\%files%.log %destdir%\%files%\%files%_%NN%.log
)
Pause
)

Получается цикл, копирование и перезапись, а мне нужно чтобы из указанных нескольких путей скопировлся допустим данный файл, а если его нет на ПК, то произошел его поиск в архиве с извлечением в указанную папку.

Знаю что, что то делаю не так, но где и что не пойму.

Т.е. должно получиться так:

Допустим есть:
\\127.0.0.1\c$\Test\1
\\127.0.0.1\c$\Test\2
\\127.0.0.1\c$\Test\3
\\127.0.0.1\c$\Test\4
\\127.0.0.1\c$\Test\5
\\127.0.0.1\c$\Test\6

В них есть файл:
2020-10-05.gw.uniroll.log ( где 2020-10-05 - дата, а остальное может меняться gw.uniroll.log, YY.XXX.log) Все это будет указываться в bat-нике
Если этого файла нет в ни по одному из пути выше, то необходим поиск и извлечение этого файла из:

\\127.0.0.1\c$\Backup\1
\\127.0.0.1\c$\Backup\2
\\127.0.0.1\c$\Backup\3
\\127.0.0.1\c$\Backup\4
\\127.0.0.1\c$\Backup\5
\\127.0.0.1\c$\Backup\6

в файле backup.rar, который дописывается файлами 3-х дневной давности.

KamikadZZe 20-10-2020 22:15 2937048

Цитата:

Цитата megaloman
Вы не изложили четко постановку задачи. »

Прошу прощения если не совсем корректно описал задачу!


Из данного примера и описания можно что ни будь сделать?
Написал часть кода по копированию, но не совсем получилось что хотел.
Получается что копирует файл и тут же его перезаписывает.
Посмотрите пожалуйста что я не так сделал?!

Сам код:
@Echo on
path c:\windows\system32

etLocal EnableDelayedExpansion

Set sourcedir0=\\127.0.0.1\c$\Test\1
Set destdir=\\127.0.0.1\d$\Backup\files
Set files=2020-10-05.gw.uniroll


call :SUB0001



:SUB0001
for %%F in (%files%) do (for /L %%N in (6,-1,1) do (if %%N LEQ 9 (set NN=00%%N) else set NN=%%N))
For /F "Tokens=1" %%a In ('dir /A:-D /T:C /O:D "%sourcedir0%\*.*" ^| Findstr /E /c:"%files%"') Do (
if not exist %files%_%NN%.log md "%destdir%\%files%
)
xcopy /chkqr %sourcedir0%\%files%.log %destdir%\%files%\%files%_%NN%.log
)
Pause
)

Получается цикл, копирование и перезапись, а мне нужно чтобы из указанных нескольких путей скопировлся допустим данный файл, а если его нет на ПК, то произошел его поиск в архиве с извлечением в указанную папку.

Знаю что, что то делаю не так, но где и что не пойму.

Т.е. должно получиться так:

Допустим есть:
\\127.0.0.1\c$\Test\1
\\127.0.0.1\c$\Test\2
\\127.0.0.1\c$\Test\3
\\127.0.0.1\c$\Test\4
\\127.0.0.1\c$\Test\5
\\127.0.0.1\c$\Test\6

В них есть файл:
2020-10-05.gw.uniroll.log ( где 2020-10-05 - дата, а остальное может меняться gw.uniroll.log, YY.XXX.log) Все это будет указываться в bat-нике
Если этого файла нет в ни по одному из пути выше, то необходим поиск и извлечение этого файла из:

\\127.0.0.1\c$\Backup\1
\\127.0.0.1\c$\Backup\2
\\127.0.0.1\c$\Backup\3
\\127.0.0.1\c$\Backup\4
\\127.0.0.1\c$\Backup\5
\\127.0.0.1\c$\Backup\6

в файле backup.rar, который дописывается файлами 3-х дневной давности.

Elven 21-10-2020 06:48 2937057

KamikadZZe, используйте для кода тег code #. А то не особенно удобно читать код размазанный в текст.
Цитата:

Цитата megaloman
не решена ветка »

megaloman, в список компов в FOR я добавил пункт "backup" из расчета потом сделать для него отдельный кусок, а потом - забыл :lol: не представляю как я так умудрился, скорей всего куда-то меня кто-то отвлек...

KamikadZZe 21-10-2020 10:05 2937077

Цитата:

Цитата Elven
используйте для кода тег code #. А то не особенно удобно читать код размазанный в текст. »

Код:

@Echo on
path c:\windows\system32

etLocal EnableDelayedExpansion

Set sourcedir0=\\127.0.0.1\c$\Test\1
Set destdir=\\127.0.0.1\d$\Backup\files
Set files=2020-10-05.gw.uniroll


call :SUB0001



:SUB0001
        For %%F in (%files%) do (for /L %%N in (6,-1,1) do (if %%N LEQ 9 (set NN=00%%N) else set NN=%%N)
        )
                For /F "Tokens=1" %%a In ('dir /A:-D /T:C /O:D "%sourcedir0%\*.*" ^| Findstr /E /c:"%files%"') Do (
                        if not exist %files%_%NN%.log md "%destdir%\%files%
                )
                xcopy /chkqr %sourcedir0%\%files%.log %destdir%\%files%\%files%_%NN%.log
        )
        Pause


KamikadZZe 23-10-2020 17:32 2937338

Доброго времени суток!
Ребят, по задаче нет пока решений?

megaloman 23-10-2020 17:36 2937339

Доброго времени суток! А постановку так и не возможно разъяснить, а не предоставлять собственный нерабочий код, из которого надо еще и постановку вытащить. В соответствии с Вашей постановкой в заголовке, ИМХО, задача решена.

KamikadZZe 23-10-2020 18:21 2937344

Цитата:

Цитата megaloman
Доброго времени суток! А постановку так и не возможно разъяснить, а не предоставлять собственный нерабочий код, из которого надо еще и постановку вытащить »

Есть 6 серверов на которых крутится одно и тоже ПО.
На всех серверах ведется логирование разных плагинов, модулей и т.д.. Названия этих логов одинаковые для все серверов
например:
2020-10-05.gw.uniroll.log, где 2020-10-05 - дата, gw.uniroll - название модуля.
каждые сутки создается новый лог.

Раз в 3-и дня данные логи, кроме за текущий день сбрасываются на сервер backup в архив с логами (т.е. архив дописывается логами в течении квартала, а затем создается новый архив).

Сейчас в ручном режиме приходится в расшаренной папке на своем ПК создавать папку с названием лога (скажем 2020-10-05.gw.uniroll), заходить на каждый сервер (если лог не старше 3-х дней) или на Backup (в архивы с логами) выбирать там нужный лог (скажем 2020-10-05.gw.uniroll.log) и скидывать их к себе на ПК в созданную папку дописывая к названию каждого условное обозначение сервера, чтобы знать с какого сервера и не затереть предыдущий лог:
2020-10-05.gw.uniroll_001.log, 2020-10-05.gw.uniroll_002.log, 2020-10-05.gw.uniroll_003.log и т.д
Затем это все архивируется с паролем и отправляется по почте инициатору.

Необходимо:
Основная задача:
Когда приходят запросы предоставить лог работы модуля скажем gw.uniroll за 05.10.2020 г., чтобы не лезть на каждый сервер (если запрашиваемый лог не старше 3-х дней) или не лезть на backup в архивы (если лог старше 3-х дней), а при указании в батнике необходимого имени лога, он создавал папку с именем лога производил поиск этого лога на каждом сервере или в архиве с каждого сервера и копировал в созданную папку логи дописывая к имени лога условный номер сервера (001, 002, 003 и т.д.), чтобы знать с какого сервера и не затереть предыдущий скопированный лог.

Если возможно дополнительная задача:
Собрав все логи с серверов или архивов в одну папку произвести архивирование данной папки с паролем (пароль для архива можно тоже, чтобы указывался в батнике).

megaloman 23-10-2020 21:24 2937354

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

Серверы могут идентифицироваться как именами, например: 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:56 2937411

Вариант решения - к имени файлов добавляются номера в соответствии с порядком следования имён серверов в списке
Код:

@Echo Off
        Call :Together "2020-10-17.gw.uniroll.log"
        Call :Together "2020-10-18.gw.uniroll.log"
        Call :Together "2020-10-19.gw.uniroll.log"
        Call :Together "2020-10-20.gw.uniroll.log"
        Call :Together "2020-10-21.gw.uniroll.log"
        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)
        )
       
        Set /A N=1000
        >nul 2>&1 (For %%c In (%AllComp%) Do (
                Set /A N+=1
                Call Copy "\\%%c\%LogFolder%\%~1" "%BoxOut%\%~n1\%~n1_%%N:~1%%%~x1" ||(
                Call Copy "%Backup%\%%c\%~1" "%BoxOut%\%~n1\%~n1_%%N:~1%%%~x1")
        ))

        "C:\Program Files\WinRAR\WinRAR.exe" a -ep1 -hpPassword "%BoxOut%\%~nx1.rar" "%BoxOut%\%~n1\*.*"
        "C:\Program Files\7-Zip\7zG.exe" a -pPassword "%BoxOut%\%~nx1.7Z" "%BoxOut%\%~n1\*.*"
Exit /B

Тут для примера сделано еще последовательная "вытяжка" логов за несколько дней.

KamikadZZe 26-10-2020 22:18 2937671

Ребят, большая благодарность за помощь, в особенности Elven и Megaloman!
Megaloman, отдельный респект, за постановку задачи и варианты решения!

1. При использовании данного варианта:
Цитата:

Цитата megaloman
Вариант решения - к имени файлов добавляются имена серверов »

Код:

@Echo On
        Call :Together "2020-10-05.gw.uniroll.log"
Exit /B

:Together
        Set "AllComp=127.0.0.1\c$\Test\1 127.0.0.1\c$\Test\2"
        Set "LogFolder=Log"

        Set "BoxOut=d:\Backup\files"

        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")
        )>> d:\Backup\log\1.txt
        )
       
Exit /B

После исполнения кода получается:
d:\Backup>(Copy "\\127.0.0.1\c$\Test\1\Log\2020-10-05.gw.uniroll.log" "d:\Backup\files\2020-10-05.gw.uniroll\2020-10-05.gw.uniroll_127.0.0.1\c$\Test\1.log" )
Скопировано файлов: 0.

d:\Backup>(Copy "\\127.0.0.1\c$\Test\2\Log\2020-10-05.gw.uniroll.log" "d:\Backup\files\2020-10-05.gw.uniroll\2020-10-05.gw.uniroll_127.0.0.1\c$\Test\2.log" )
Скопировано файлов: 0.

При использовании кода:
Код:

@Echo on
        Call :Together "2020-10-05.gw.uniroll.log"
Exit /B

:Together
        Set "AllComp=127.0.0.1\c$\Test\1 127.0.0.1\c$\Test\2"
        Set "LogFolder=log"

        Set "BoxOut=d:\Backup\files"

        If Not Exist "%BoxOut%\%~n1" (
                Md "%BoxOut%\%~n1" ||(Echo Folder "%BoxOut%\%~n1" not created &Pause &Exit /B 1)
        )
       
        Set /A N=1000
        >nul 2>&1 (For %%c In (%AllComp%) Do (
                Set /A N+=1
                Call Copy "\\%%c\%LogFolder%\%~1" "%BoxOut%\%~n1\%~n1_%%N:~1%%%~x1")
                )>> d:\Backup\log\1.txt
                )               
                Exit /B

Все копируется нормально:
d:\Backup>(
Set /A N+=1
Call Copy "\\127.0.0.1\c$\Test\1\log\2020-10-05.gw.uniroll.log" "d:\Backup\files\2020-10-05.gw.uniroll\2020-10-05.gw.uniroll_%N:~1%.log"
)
Скопировано файлов: 1.

d:\Backup>(
Set /A N+=1
Call Copy "\\127.0.0.1\c$\Test\2\log\2020-10-05.gw.uniroll.log" "d:\Backup\files\2020-10-05.gw.uniroll\2020-10-05.gw.uniroll_%N:~1%.log"
)
Скопировано файлов: 1.

Но ув. Megaloman меня не совсем верно понял, в связи с чем возникли небольшие трудности (недочеты), т.к. я не указал что:
Цитата:

На каждом сервере в указанной папке ежедневно создаются файлы имя.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
Логирование производится в папку с программой. Диск где установлена программа скрытый, а программа находится в с$\Program Files (x86).
На всех серверах и backup одна уч. запись, через нее имеется доступ к скрытым ресурсам данных серверов.

т.е. путь к ним выглядит:
\\Server1\c$\Program Files (x86)\Test\Log\2020-10-22.gw.uniroll.log ...2020-10-21.gw.uniroll.log ...2020-10-20.gw.uniroll.log
\\Server2\c$\Program Files (x86)\Test\Log\2020-10-22.gw.uniroll.log ...2020-10-21.gw.uniroll.log ...2020-10-20.gw.uniroll.log

2.
Цитата:

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

Если копирование логов из
\\Server1\c$\Program Files (x86)\Test\Log\
\\Server2\c$\Program Files (x86)\Test\Log\
.........
не произошло (данные логи не найдены), то необходимо произвести поиск и копирование с извлечением из архивов:
\\Backup_Server\d$\Arh\Server1\logs_06-092020.zip
\\Backup_Server\d$\Arh\Server2\logs_06-092020.zip
........

Ребят, возможно ли доработать коды?
Буду признателен за помощь!

Немного переделанный код Megaloman с именами серверов:
Код:

@Echo On
        Call :Together "2020-10-05.gw.uniroll.log"

Exit /B

:Together
        Set "AllComp=Max-ПК"
        Set "Folders=c$\Test\1 c$\Test\2"
        Set "LogFolder=Log"

        Set "BoxOut=d:\Backup\files"

        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 (
                        For %%a In (%Folders%) Do (
                Copy "\\%%c\%%a\%LogFolder%\%~1" "%BoxOut%\%~n1\%~n1_%%c%~x1")
                )
        )
        )
                       
Exit /B

тоже будет работает при разных именах серверов, но к сожалению почему то так же как и с нумерацией не хочет работать с c$\Program Files (x86)\Test\Log\

megaloman 27-10-2020 15:44 2937775

KamikadZZe, Вы поставили задачу, я всего лишь "причесал" постановку, изложил для себя более последовательно.
Вы применяете мои командные файлы не в соответствии с постановкой, пытаетесь их тестировать на своём компьютере.
Но в постановке - серверы должны быть разные. Как вариант, чтобы протестировать на своём компьютере, наверняка у компьютера есть и свой IP, и сетевое имя,
Код:

Set "AllComp=127.0.0.1 192.168.100.23 Max-ПК"
И добавлять к этим именам пути папок нельзя. Обратите внимание, при наличии кириллицы в именах, командный файл должен быть сохранен в 866 кодировке. Естественно, Вы будете копировать один и тот же файл со своего компьютера, но моделировать ситуацию с тремя серверами с разными адресами/именами можно. И, по условиям Вашей постановки, расположение папки с логами на разных серверах одинаковое, например:
Код:

Set "LogFolder=C$\Program Files (x86)\Test\Log"
И список путей здесь неумесен, здесь только один путь.
Содержимое папки \\127.0.0.1\C$\Program Files (x86)\Test\Log
Код:

20.10.2020  20:41                21 2020-10-20.gw.uniroll.log
20.10.2020  20:41                21 2020-10-21.gw.uniroll.log
20.10.2020  20:41                21 2020-10-22.gw.uniroll.log

В папке, где хранятся старые бэкапы соответственно должны содержаться подпапки с правильными именами, совпадающими с указанными Вами в списке
Содержимое папки \\Backup_Server\Test2
Код:

27.10.2020  14:27    <DIR>          127.0.0.1
23.10.2020  20:52    <DIR>          192.168.100.23
23.10.2020  20:51    <DIR>          Max-ПК

В частности, содержимое одной из папок \\Backup_Server\Test2\127.0.0.1
Код:

23.10.2020  20:52                0 2020-10-17.gw.uniroll.log
23.10.2020  20:52                0 2020-10-18.gw.uniroll.log
23.10.2020  20:52                0 2020-10-19.gw.uniroll.log

Мои командные файлы с приближением к Вашим путям, без иных изменений
Добавляем имя серверов
Код:

@Echo Off
        Call :Together "2020-10-17.gw.uniroll.log"
        Call :Together "2020-10-20.gw.uniroll.log"
Exit /B

:Together
        Set "AllComp=127.0.0.1 192.168.100.23 Max-ПК"
        Set "LogFolder=C$\Program Files (x86)\Test\Log"

        Set "Backup=\\Backup_Server\Test2"
        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\*.*"
        "C:\Program Files\7-Zip\7zG.exe" a -pPassword "%BoxOut%\%~nx1.7Z" "%BoxOut%\%~n1\*.*"
Exit /B

Добавляем нумерацию по порядку
Код:

@Echo Off
        Call :Together "2020-10-18.gw.uniroll.log"
        Call :Together "2020-10-21.gw.uniroll.log"
Exit /B

:Together
        Set "AllComp=127.0.0.1 192.168.100.23 Max-ПК"
        Set "LogFolder=C$\Program Files (x86)\Test\Log"

        Set "Backup=\\Backup_Server\Test2"
        Set "BoxOut=Z:\Box_Out"

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

        "C:\Program Files\WinRAR\WinRAR.exe" a -ep1 -hpPassword "%BoxOut%\%~nx1.rar" "%BoxOut%\%~n1\*.*"
        "C:\Program Files\7-Zip\7zG.exe" a -pPassword "%BoxOut%\%~nx1.7Z" "%BoxOut%\%~n1\*.*"
Exit /B

Архивацию выбирайте сами, или пишите сами для других архиваторов
И, наконец, результат работы командных файлов
Код:

Содержимое папки Z:\Box_Out

27.10.2020  15:35    <DIR>          2020-10-17.gw.uniroll
27.10.2020  15:35              268 2020-10-17.gw.uniroll.log.7Z
27.10.2020  15:35              590 2020-10-17.gw.uniroll.log.rar

27.10.2020  15:37    <DIR>          2020-10-18.gw.uniroll
27.10.2020  15:37              234 2020-10-18.gw.uniroll.log.7Z
27.10.2020  15:37              542 2020-10-18.gw.uniroll.log.rar

27.10.2020  15:35    <DIR>          2020-10-20.gw.uniroll
27.10.2020  15:35              279 2020-10-20.gw.uniroll.log.7Z
27.10.2020  15:35              590 2020-10-20.gw.uniroll.log.rar

27.10.2020  15:37    <DIR>          2020-10-21.gw.uniroll
27.10.2020  15:37              244 2020-10-21.gw.uniroll.log.7Z
27.10.2020  15:37              542 2020-10-21.gw.uniroll.log.rar


 Содержимое папки Z:\Box_Out\2020-10-17.gw.uniroll

23.10.2020  20:52                0 2020-10-17.gw.uniroll_127.0.0.1.log
23.10.2020  20:52                0 2020-10-17.gw.uniroll_192.168.100.23.log
20.10.2020  20:41                21 2020-10-17.gw.uniroll_Max-ПК.log


 Содержимое папки Z:\Box_Out\2020-10-20.gw.uniroll

20.10.2020  20:41                21 2020-10-20.gw.uniroll_127.0.0.1.log
20.10.2020  20:41                21 2020-10-20.gw.uniroll_192.168.100.23.log
20.10.2020  20:41                21 2020-10-20.gw.uniroll_Max-ПК.log


 Содержимое папки Z:\Box_Out\2020-10-18.gw.uniroll

23.10.2020  20:52                0 2020-10-18.gw.uniroll_001.log
23.10.2020  20:52                0 2020-10-18.gw.uniroll_002.log
20.10.2020  20:41                21 2020-10-18.gw.uniroll_003.log


 Содержимое папки Z:\Box_Out\2020-10-21.gw.uniroll

20.10.2020  20:41                21 2020-10-21.gw.uniroll_001.log
20.10.2020  20:41                21 2020-10-21.gw.uniroll_002.log
20.10.2020  20:41                21 2020-10-21.gw.uniroll_003.log

Если такой подход Вас не устраивает, уточняйте постановку.

KamikadZZe 29-10-2020 22:17 2938112

Всем доброго времени суток!
Megaloman - Благодарю за пояснение и за помощь!!!
По поводу копирования логов с боевых серверов: Set "AllComp=127.0.0.1 192.168.100.23 Max-ПК"
Все работает как часики. Огромнейшая благодарность!

Цитата:

Цитата megaloman
Если такой подход Вас не устраивает, уточняйте постановку. »

Но вот по поводу Set "Backup=\\Backup_Server\ не работает как надо.
Если на Backup_Server логи хранились в папках AllComp в открытом виде, то все работает как часы!

Дело в том, что на \\Backup_Server все логи хранятся в упакованном в rar архивы виде.

Цитата:

Backup (в архивы с логами) выбирать там нужный лог

Цитата:

не произошло (данные логи не найдены), то необходимо произвести поиск и копирование с извлечением из архивов:
\\Backup_Server\d$\Arh\Server1\logs_06-092020.zip
\\Backup_Server\d$\Arh\Server2\logs_06-092020.zip

Например:
На сервере Backup_Server содержатся папки с названием серверов:
127.0.0.1
192.168.100.23
Max-ПК

в которых имеются rar архивы:
log from 012020.rar
log from 042020.rar
log from 062020.rar
log from 102020.rar

Необходимо, чтобы в случае отсутствия необходимого лога на серверах:
127.0.0.1
192.168.100.23
Max-ПК

лог искался на сервере \\Backup_Server\
в папках:
127.0.0.1
192.168.100.23
Max-ПК

в архивах:
log from 012020.rar
log from 042020.rar
log from 062020.rar
log from 102020.rar

Возможно ли реализовать такой вариант?
Ну или какой вариант, если он есть возможен?
Имя лога можно поправить под необходимый, главное чтобы в нем стояла месяц и год (log from 012020.rar) или период (logs_06-092020.zip)
С архивацией zip, rar, 7z тоже можно решить вопрос, если это критично.

Буду презнателен и благодарен за помощь!

megaloman 30-10-2020 13:41 2938173

KamikadZZe, какое содержание архивов (какие имена файлов, с путями?) и, наконец, какой он?
То ли \\Backup_Server\d$\Arh\Server1\logs_06-092020.zip
То ли \\Backup_Server\??????????\192.168.100.23\log from 042020.rar, что значат цифры в имени архива, дайте постановку четкую, я Вас об этом постоянно уговариваю.
Мазохист уговаривает садиста: мучай меня, мучай! А садист в ответ: не буду, не буду!

KamikadZZe 30-10-2020 22:51 2938237

Цитата:

Цитата megaloman
дайте постановку четкую, я Вас об этом постоянно уговариваю.
Мазохист уговаривает садиста: мучай меня, мучай! А садист в ответ: не буду, не буду! »

Приветствую!
Прошу прощения если я не четко и не конкретно объясняюсь!
Вроде пытаюсь все максимально приближено объяснить.

Т.к. каждый день в 00:00:00 создается новый лог-файл, и таких лог-фалов вида (YYYY-MM-DD.XX.YYYYYYYY.log, где YYYY-MM-DD - дата лога, XX.YYYYYYYY - название лога) за день ведется порядка 50, на Backup_Server лог-файлы с каждого сервера переносятся в папки с названием сервера: Server1,Server2,Server3,Server4,Server5,Server6 в архивированном состоянии (например:log from 072020.rar). В данном архиве собираются все лог-фалы с сервера старше 3-х дней за квартал (т.е. за каждый день начиная с 01.07.2020 до 01.10.2020).

Необходимо, чтобы при отсутствии необходимого лог-файла YYYY-MM-DD.XX.YYYYYYYY.log (например: 2020-09-17.gw.uniroll.log) на серверах: Server1,Server2,Server3,Server4,Server5,Server6 производился поиск данного лога в \\Backup_Server\ в папках Server1,Server2,Server3,Server4,Server5,Server6\ в архивах: log from 012020.rar, log from 042020.rar, log from 072020.rar, log from 102020.rar
и при нахождении данного лога, он извлекался в \Box_Out\YYYY-MM-DD.XX.YYYYY (так же как при копировании с серверов: Server1,Server2,Server3,Server4,Server5,Server6).

alpap 31-10-2020 01:36 2938242

Цитата:

Цитата KamikadZZe
каждый день в 00:00:00 создается новый лог-файл »

Цитата:

Цитата KamikadZZe
при отсутствии необходимого лог-файла YYYY-MM-DD.XX.YYYYYYYY.log (например: 2020-09-17.gw.uniroll.log) на серверах: »

- что будет проверять всё на отсутствие всех возможных логов?
- когда должна происходить такая проверка, сразу после создания лога или в пределах 3-х дней?

megaloman 31-10-2020 19:48 2938320

Поиск в rar
С именами серверов
Код:

@Echo Off
cls
        Call :Together "2020-10-31.gw.uniroll.log"
        Call :Together "2020-10-13.gw.uniroll.log"
pause
Exit /B

:Together
        Set "AllComp=127.0.0.1 LocalHost 192.168.100.23 Max-ПК"
        Set "LogFolder=C$\Program Files (x86)\Test\Log"

        Set "Backup=\\BackupServer\Test2"
        Set "Mask=log from ??20??.rar"

        Set "BoxOut=Z:\Box_Out"

        Set "Arc=C:\Program Files\WinRAR\Rar.exe"

        If Not Exist "%BoxOut%\%~n1" (
                Md "%BoxOut%\%~n1" ||(Echo Folder "%BoxOut%\%~n1" not created &Pause &Exit /B 1)
        )
       
        For %%c In (%AllComp%) Do (
                >nul 2>&1 Copy "\\%%c\%LogFolder%\%~1" "%BoxOut%\%~n1\%~n1_%%c%~x1"||(
                        Call :FromRar %1 "%Backup%\%%c" "%BoxOut%\%~n1\%~n1_%%c%~x1"
                )
        )
        "%Arc%" a -ep1 -hpPassword "%BoxOut%\%~nx1.rar" "%BoxOut%\%~n1\*.*"
Exit /B

:FromRar
        FOR /F "usebackq delims=" %%a IN (`2^>nul Dir "%~2\%Mask%" /B /A:-D /O:-D /T:W`) DO (
                FOR /F "delims=" %%f IN ('""%Arc%" lb "%~2\%%a"|Find /I %1"') DO (
                        Pushd "%~dp3"
                                >nul 2>&1 "%Arc%" e "%~2\%%a" "%%f"
                                >nul Move /Y "%%~nxf" "%~nx3"
                        Popd
                        Exit /B
                )
        )
Exit /B 1

С нумерацией
Код:

@Echo Off
cls
        Call :Together "2020-10-30.gw.uniroll.log"
        Call :Together "2020-03-13.gw.uniroll.log"
pause
Exit /B

:Together
        Set "AllComp=127.0.0.1 LocalHost 192.168.100.23 Max-ПК"
        Set "LogFolder=C$\Program Files (x86)\Test\Log"

        Set "Backup=\\BackupServer\Test2"
        Set "Mask=log from ??20??.rar"

        Set "BoxOut=Z:\Box_Out"

        Set "Arc=C:\Program Files\WinRAR\Rar.exe"

        If Not Exist "%BoxOut%\%~n1" (
                Md "%BoxOut%\%~n1" ||(Echo Folder "%BoxOut%\%~n1" not created &Pause &Exit /B 1)
        )
       
        Set /A N=1000
        For %%c In (%AllComp%) Do (
                Set /A N+=1
                >nul 2>&1 Call Copy "\\%%c\%LogFolder%\%~1" "%BoxOut%\%~n1\%~n1_%%N:~1%%%~x1"||(
                        Call :FromRar %1 "%Backup%\%%c" "%BoxOut%\%~n1\%~n1_%%N:~1%%%~x1"
                )
        )
        "%Arc%" a -ep1 -hpPassword "%BoxOut%\%~nx1.rar" "%BoxOut%\%~n1\*.*"
Exit /B

:FromRar
        FOR /F "usebackq delims=" %%a IN (`2^>nul Dir "%~2\%Mask%" /B /A:-D /O:-D /T:W`) DO (
                FOR /F "delims=" %%f IN ('""%Arc%" lb "%~2\%%a"|Find /I %1"') DO (
                        Pushd "%~dp3"
                                >nul 2>&1 "%Arc%" e "%~2\%%a" "%%f"
                                >nul Move /Y "%%~nxf" "%~nx3"
                        Popd
                        Exit /B
                )
        )
Exit /B 1

С нумерацией и именами
Код:

@Echo Off
cls
        Call :Together "2020-10-29.gw.uniroll.log"
        Call :Together "2020-03-19.gw.uniroll.log"
pause
Exit /B

:Together
        Set "AllComp=127.0.0.1 LocalHost 192.168.100.23 Max-ПК"
        Set "LogFolder=C$\Program Files (x86)\Test\Log"

        Set "Backup=\\BackupServer\Test2"
        Set "Mask=log from ??20??.rar"

        Set "BoxOut=Z:\Box_Out"

        Set "Arc=C:\Program Files\WinRAR\Rar.exe"

        If Not Exist "%BoxOut%\%~n1" (
                Md "%BoxOut%\%~n1" ||(Echo Folder "%BoxOut%\%~n1" not created &Pause &Exit /B 1)
        )
       
        Set /A N=1000
        For %%c In (%AllComp%) Do (
                Set /A N+=1
                >nul 2>&1 Call Copy "\\%%c\%LogFolder%\%~1" "%BoxOut%\%~n1\%~n1_%%N:~1%%_%%c%~x1"||(
                        Call :FromRar %1 "%Backup%\%%c" "%BoxOut%\%~n1\%~n1_%%N:~1%%_%%c%~x1"
                )
        )
        "%Arc%" a -ep1 -hpPassword "%BoxOut%\%~nx1.rar" "%BoxOut%\%~n1\*.*"
Exit /B

:FromRar
        FOR /F "usebackq delims=" %%a IN (`2^>nul Dir "%~2\%Mask%" /B /A:-D /O:-D /T:W`) DO (
                FOR /F "delims=" %%f IN ('""%Arc%" lb "%~2\%%a"|Find /I %1"') DO (
                        Pushd "%~dp3"
                                >nul 2>&1 "%Arc%" e "%~2\%%a" "%%f"
                                >nul Move /Y "%%~nxf" "%~nx3"
                        Popd
                        Exit /B
                )
        )
Exit /B 1

        Set /A N=1000
        >nul 2>&1 (For %%c In (%AllComp%) Do (
                Set /A N+=1
                Call Copy "\\%%c\%LogFolder%\%~1" "%BoxOut%\%~n1\%~n1_%%N:~1%%%~x1" ||(
                Call Copy "%Backup%\%%c\%~1" "%BoxOut%\%~n1\%~n1_%%N:~1%%%~x1")
        ))


KamikadZZe 02-11-2020 22:00 2938622

Доброго времени суток всем форумчанам!
Megaloman, ОГРОМНЕЙШАЯ БЛАГОДАРНОСТЬ за помощь в постановке и решении моей задачи!!!!
Просто Гений!!!
Цитата:

Цитата megaloman
Поиск в rar »

Работает как швейцарские часы!

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

Всем кто не остался равнодушным и тоже пытался помочь, тоже ОГРОМНЕЙШАЯ БЛАГОДАРНОСТЬ!
Вопрос считаю решенным, а тему закрытой!

KamikadZZe 26-11-2020 14:21 2941087

Доброго времени суток!
Цитата:

Цитата megaloman
Поиск в rar
С именами серверов »

Уважаемый Megaloman!

Не могли бы помочь решить возникшую проблемку.
Хотел немного адаптировать батник написанный вами под рабочую среду, но возникла проблема:
Код:

@Echo On
cls
            Call :Together "2020-11-08.uniroll.log"
       
pause
Exit /B

:Together
        Set "AllComp=127.0.0.1 Max-ПК"
        Set "LogFolder=c$\logs"
       

        Set "Backup=d:\BackUp"
        Set "BackupFolder=app001 app002"       
        Set "Mask=log from ??.??.20??.rar"

        Set "BoxOut=d:\BackUp\Copy"

        Set "Arc=C:\Program Files\WinRAR\Rar.exe"

        If Not Exist "%BoxOut%\%~n1" (
                Md "%BoxOut%\%~n1" ||(Echo Folder "%BoxOut%\%~n1" not created &Pause &Exit /B 1
        )

       
        For %%c In (%AllComp%) Do (       
                >nul 2>&1 Copy "\\%%c\%LogFolder%\%~1" "%BoxOut%\%~n1\%~n1_%%c%~x1"||(
        For %%b In (%BackupFolder%) Do (
                Call :FromRar %1 "%Backup%\%%b" "%BoxOut%\%~n1\%~n1_%%c%~x1"
                ) >>1.txt
        Pause               
                          )
                )
        )       
        "%Arc%" a -ep1 -hp123 "%BoxOut%\%~nx1.rar" "%BoxOut%\%~n1\*.*"
Pause
       
Exit /B

:FromRar
               
        FOR /F "usebackq delims=" %%a IN (`2^>nul Dir "%~2\%Mask%" /B /A:-D /O:-D /T:W`) DO (
                FOR /F "delims=" %%f IN ('""%Arc%" lb "%~2\%%a"|Find /I %1"') DO (                       
                        Pushd "%~dp3"
                                >nul 2>&1 "%Arc%" e "%~2\%%a" "%%f"
                                >nul Move /Y "%%~nxf" "%~nx3"                               
                        Popd                                                       
                        Exit /B
                )
        )
Exit /B 1

Проблема след. рода:
Батник ищет в архиве "BackupFolder=app001 app002" необходимый лог, находит его и переименовывает его добавляя AllComp, но не 1 раз, а столько, сколько их прописано в AllComp:
пример:
В архиве app001 1 файл 2020-11-08.unirol
2020-11-08.uniroll_127.0.0.1.log
2020-11-08.uniroll_Max-ПК.log
В архиве app002 1 файл 2020-11-08.unirol
2020-11-08.uniroll_127.0.0.1.log
2020-11-08.uniroll_Max-ПК.log
Т.е получается 1 и тот же файл с разными именами.
Файл извлекается из каждого архива, а перезаписывается последним 2020-11-08.unirol из последнего app002 архива

KamikadZZe 26-11-2020 21:08 2941120

Цитата:

Цитата megaloman
KamikadZZe, Лучше бы Вы рассказали, о какой рабочей среде речь (постановку дайте, умоляю). Вы изменили мой код, что Вы хотите сделать, надо докапываться, тем более что задача решалась давно. Мне надо как-то сымитировать Вашу ситуацию, чтобы что-то сделать. »

Прошу прощения что не сразу отписался о возникшей проблеме при изменении кода!

Есть несколько серверов.

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

На каждом сервере
Например:
Server1
Server2
Server3
.......
итд.

имеется папка Logs расположенная в:
C$\Program Files (x86)\Test\Log"

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

Более старые файлы перемещаются в архив, в папку определяющую сервер-источника на сервере Backup, например:
\\Server_Buckup\d$\BackUp\app001\log from ??.??.20??.rar"
\\Server_Buckup\d$\BackUp\app002\log from ??.??.20??.rar"
\\Server_Buckup\d$\BackUp\app003\log from ??.??.20??.rar"
.......
итд.

Задача: собрать определённый логфайл, например: 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
...............
итд.

Если файл старше нескольких дней то поиск осуществляется в архивах:
Например: \\Server_Buckup\d$\BackUp\app001\log from ??.??.20??.rar"
\\Server_Buckup\d$\BackUp\app002\log from ??.??.20??.rar"
\\Server_Buckup\d$\BackUp\app003\log from ??.??.20??.rar"
.......
итд.

Полученную папку заархивировать

Приведенный код хотел подстроить под данную постановку:
[CODE]@Echo On
cls
Call :Together "2020-11-08.uniroll.log"

pause
Exit /B

:Together
Set "AllComp=127.0.0.1 Max-ПК"
Set "LogFolder=c$\logs"


Set "Backup=d:\BackUp"

Set "BackupFolder=app001 app002"
Set "Mask=log from ??.??.20??.rar"

Set "BoxOut=d:\BackUp\Copy"

Set "Arc=C:\Program Files\WinRAR\Rar.exe"

If Not Exist "%BoxOut%\%~n1" (
Md "%BoxOut%\%~n1" ||(Echo Folder "%BoxOut%\%~n1" not created &Pause &Exit /B 1
)


For %%c In (%AllComp%) Do (

>nul 2>&1 Copy "\\%%c\%LogFolder%\%~1" "%BoxOut%\%~n1\%~n1_%%c%~x1"||(
For %%b In (%BackupFolder%) Do (
Call :FromRar %1 "%Backup%\%%b" "%BoxOut%\%~n1\%~n1_%%c%~x1"
) >>1.txt
Pause
)
)
)
"%Arc%" a -ep1 -hp123 "%BoxOut%\%~nx1.rar" "%BoxOut%\%~n1\*.*"
Pause

Exit /B

:FromRar

FOR /F "usebackq delims=" %%a IN (`2^>nul Dir "%~2\%Mask%" /B /A:-D /O:-D /T:W`) DO (
FOR /F "delims=" %%f IN ('""%Arc%" lb "%~2\%%a"|Find /I %1"') DO (
Pushd "%~dp3"
>nul 2>&1 "%Arc%" e "%~2\%%a" "%%f"
>nul Move /Y "%%~nxf" "%~nx3"
Popd
Exit /B
)
)
Exit /B 1

[/code]

В дополнение:
Цитата:

Цитата KamikadZZe
На каждом сервере в указанную папку ежедневно создаются файлы имя.log, где хранятся лог-файлы за несколько дней,
например:
\\Server1\Logs\2020-10-22.gw.uniroll.log ...2020-10-21.gw.uniroll.log ...2020-10-20.gw.uniroll.log \\Server2\Logs\2020-10-22.gw.uniroll.log ...2020-10-21.gw.uniroll.log ...2020-10-20.gw.uniroll.log
\\Server3\Logs\2020-10-22.gw.uniroll.log ...2020-10-21.gw.uniroll.log ...2020-10-20.gw.uniroll.log
.......
итд.
Более старые файлы перемещаются в архив, в папку определяющую сервер-источника на сервере Backup, например:
\\Server_Buckup\d$\BackUp\app001\log from ??.??.20??.rar"
\\Server_Buckup\d$\BackUp\app002\log from ??.??.20??.rar"
\\Server_Buckup\d$\BackUp\app003\log from ??.??.20??.rar"
.......
итд. »

Файлов 2020-10-22.gw.uniroll.log за определенный день может быть несколько, т.е. происходит дополнительная их нумерация в течении дня.
2020-10-22.gw.uniroll.log - основной
2020-10-22.gw.uniroll_0.log -архивный
2020-10-22.gw.uniroll_1.log -архивный
.......
итд.

megaloman 26-11-2020 21:48 2941124

Цитата:

Цитата KamikadZZe
Серверы могут идентифицироваться как именами ....так и по IP ... либо в их комбинации[/post]

Это я понимаю.
Server1 192.168.1.208 Server2 Server3 192.168.1.121 192.168.1.15
Не понимаю, как это связано с
app001 app002 app003 app004 app005 app006

KamikadZZe 27-11-2020 19:37 2941214

Цитата:

Цитата megaloman
Это я понимаю.
Server1 192.168.1.208 Server2 Server3 192.168.1.121 192.168.1.15
Не понимаю, как это связано с
app001 app002 app003 app004 app005 app006 »

Доброго времени суток!

Server 1 допустим имеет IP 192.168.1.208 и имя XXXX-XXX-XXX-APP001

Server 2 допустим имеет IP 192.168.1.209 и имя XXXX-XXX-XXX-APP002

.......
и т.д.

поэтому, чтобы не переписывать все длинные названия серверов, условно архивные папки называются:
app001 app002 app003 app004 app005 app006

А при запросах на предоставление логов, кому то не принципиально название и можно просто нумеровать лог (2020-10-22.gw.uniroll_APP001.log, 2020-10-22.gw.uniroll_APP002.log и т.д, или по IP - 2020-10-22.gw.uniroll_192.168.0.208.log, 2020-10-22.gw.uniroll_192.168.0.209.log и т.д.), а кому то принципиально и хотят чтобы в имени лога присутствовало имя сервера 2020-10-22.gw.uniroll_XXXX-XXX-XXX-APP001.log, 2020-10-22.gw.uniroll_XXXX-XXX-XXX-APP002.log и т.д)

Поэтому хотел адаптировать коды (под рабочую среду).

Пытался изменить код сам, но получил не то что хотел!

megaloman 28-11-2020 18:05 2941318

Вот вариант. Ставится реальное имя сервера либо его IP наименованиям условно архивных папок
Код:

@Echo Off
cls
        Call :Together "2020-11-01.gw.uniroll.log"
        Call :Together "2020-11-28.gw.uniroll.log"
        Call :Together "2019-11-28.gw.uniroll.log"
        Call :Together "2020-11-29.gw.uniroll.log"
        Call :Together "2019-11-29.gw.uniroll.log"
pause
Exit /B

:Together
        Set "AllComp=127.0.0.1 LocalHost 192.168.100.23"
        Set "AllRar= app001    app002    app003"

        Set /A N=1000
        For %%i In (%AllRar%) Do (Set /A N+=1 &Call Set "@@Arc%%N%%=%%i")

        Set "LogFolder=C$\Program Files (x86)\Test\Log"

        Set "Backup=\\192.168.100.23\Test2"
        Set "Mask=log from ??20??.rar"

        Set "BoxOut=Z:\Box_Out"

        Set "Arc=C:\Program Files\WinRAR\Rar.exe"

        If Not Exist "%BoxOut%\%~n1" (
                Md "%BoxOut%\%~n1" ||(Echo Folder "%BoxOut%\%~n1" not created &Pause &Exit /B 1)
        )
       
        Set /A N=1000
        For %%c In (%AllComp%) Do (
                Set /A N+=1
                >nul 2>&1 Call Copy "\\%%c\%LogFolder%\%~1" "%BoxOut%\%~n1\%~n1_%%N:~1%%_%%c%~x1"||(
                        Call :FromRar %1 "%Backup%\%%N%%" "%BoxOut%\%~n1\%~n1_%%N:~1%%_%%c%~x1"
                )
        )
        "%Arc%" a -ep1 -hpPassword "%BoxOut%\%~nx1.rar" "%BoxOut%\%~n1\*.*"
Exit /B

:FromRar
        Call Set "DirRar=%~dp2%%@@Arc%~nx2%%"

        FOR /F "usebackq delims=" %%a IN (`2^>nul Dir "%DirRar%\%Mask%" /B /A:-D /O:-D /T:W`) DO (
                FOR /F "delims=" %%f IN ('""%Arc%" lb "%DirRar%\%%a"|Find /I %1"') DO (
                        Pushd "%~dp3"
                                >nul 2>&1 "%Arc%" e "%DirRar%\%%a" "%%f"
                                >nul Move /Y "%%~nxf" "%~nx3"
                        Popd
                        Exit /B
                )
        )
Exit /B 1


KamikadZZe 02-12-2020 22:04 2941809

Доброго времени суток!
Цитата:

Цитата megaloman
Вот вариант. Ставится реальное имя сервера либо его IP наименованиям условно архивных папок »

Megaloman, благодарю за помощь!
Очень признателен за вашу помощь!!!
Копирование с серверов и из папок с архивами код выполняет на ура.

Единственный нюанс, который не сработал, не удалось скопировать все файлы одного формата в течении дня.
Цитата:

Цитата KamikadZZe
Файлов 2020-10-22.gw.uniroll.log за определенный день может быть несколько, т.е. происходит дополнительная их нумерация в течении дня.
2020-10-22.gw.uniroll.log - основной
2020-10-22.gw.uniroll_0.log -архивный
2020-10-22.gw.uniroll_1.log -архивный
.......
итд. »

Проверял несколько раз, так и не получилось. :-(

megaloman 03-12-2020 19:49 2941903

Цитата:

Цитата KamikadZZe
2020-10-22.gw.uniroll.log - основной
2020-10-22.gw.uniroll_0.log -архивный
2020-10-22.gw.uniroll_1.log -архивный »

Где эти файлы? Как в папках для свежих логов, так и в заархивированном виде?
2020-10-22.gw.uniroll.log обязательно есть? А 2020-10-22.gw.uniroll_0.log может быть, а может и не быть?
Постановка ....
Я понимаю так: Сначала создаётся 2020-10-22.gw.uniroll.log
Если необходимо потом следующий 2020-10-22.gw.uniroll_0.log
Если необходимо потом следующий 2020-10-22.gw.uniroll_1.log
и т д
Вот модификация решения под такую постановку
Код:

@Echo Off
cls
        Call :Together "2020-11-01.gw.uniroll.log"
        Call :Together "2020-11-28.gw.uniroll.log"
        Call :Together "2019-11-28.gw.uniroll.log"
        Call :Together "2020-11-29.gw.uniroll.log"
        Call :Together "2019-11-29.gw.uniroll.log"
pause
Exit /B

:Together
        Set "AllComp=127.0.0.1 LocalHost 192.168.100.23"
        Set "AllRar= app001    app002    app003"

        Set /A N=1000
        For %%i In (%AllRar%) Do (Set /A N+=1 &Call Set "@@Arc%%N%%=%%i")

        Set "LogFolder=C$\Program Files (x86)\Test\Log"

        Set "Backup=\\192.168.100.23\Test2"
        Set "Mask=log from ??20??.rar"

        Set "BoxOut=Z:\Box_Out"

        Set "Arc=C:\Program Files\WinRAR\Rar.exe"

        If Not Exist "%BoxOut%\%~n1" (
                Md "%BoxOut%\%~n1" ||(Echo Folder "%BoxOut%\%~n1" not created &Pause &Exit /B 1)
        )
       
        Set /A N=1000
        For %%c In (%AllComp%) Do (
                Set /A N+=1
                For %%i In ("\\%%c\%LogFolder%\%~n1_*%~x1") Do >nul 2>&1 Call Copy "%%i" "%BoxOut%\%~n1\%%N:~1%%_%%c_%%~nxi"
                >nul 2>&1 Call Copy "\\%%c\%LogFolder%\%~1" "%BoxOut%\%~n1\%%N:~1%%_%%c_%~1"||(
                        Call :FromRar %1 "%Backup%\%%N%%" "%BoxOut%\%~n1" "%%N:~1%%_%%c_"
                )
        )
        "%Arc%" a -ep1 -hpPassword "%BoxOut%\%~nx1.rar" "%BoxOut%\%~n1\*.*"
Exit /B

:FromRar
        Call Set "DirRar=%~dp2%%@@Arc%~nx2%%"

        FOR /F "usebackq delims=" %%a IN (`2^>nul Dir "%DirRar%\%Mask%" /B /A:-D /O:-D /T:W`) DO (
                FOR /F "delims=" %%f IN ('""%Arc%" lb "%DirRar%\%%a"|Find /I %1"') DO (
                        Set "NF=%%f"
                        Call Set "NF=%%NF:%%~xf=_*%%~xf%%"
                        Pushd %3
                                >nul 2>&1 Call "%Arc%" e "%DirRar%\%%a" "%%f" "%%NF%%"
                                >nul (For %%i In (%1 "%~n1_*%~x1") Do Move /Y %%i "%~4%%~i")
                        Popd
                        Exit /B
                )
        )
Exit /B 1


KamikadZZe 21-12-2020 19:16 2943695

Доброго времени суток!
Цитата:

Цитата megaloman
Вот модификация решения под такую постановку »

Уважаемый Megaloman, благодарю за помощь!


Время: 05:12.

Время: 05:12.
© OSzone.net 2001-