Показать полную графическую версию : [решено] Копирование файлов с одинаковым именем с разных ПК или с backup архива
KamikadZZe
20-10-2020, 13:16
Доброго времени суток!
Есть несколько ПК. В моем случае их пока 6. На них запущена одна и та же программа. Программа ведет логирование в папку log на каждом ПК.
Все логи на 6-ти ПК имеют одно и тоже название. Кроме того, логи старше нескольких дней перекидываются в backup архив на другой ПК, который служит для хранения логов (Backup).
На Backup логи в архиве хранятся в папке с именем ПК
Т.к. бывает необходимо найти лог с определенным именем на всех ПК или на Backup и собрать их в папку (папка с названием лога) для проверки или передачи:
Прошу помощи в написании bat-ника для поиска файлов с определенным именем (одинаковое имя файла) на разных ПК, а если их в папках на ПК нет, то поиск в backup архивах с этих ПК и извлечении данных файлов в папку с названием лога.
Т.к. данные файлы носят одинаковое имя, то необходимо их нумеровать (имя файла_001, имя файла_002 и т.д.) или же дописывать к имени файла имя ПК.
@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, спасибо, исправил. Плохо когда под рукой нету компа с виндой.
megaloman
20-10-2020, 20:52
@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 /BElven, У Вас не решена ветка алгоритмалоги старше нескольких дней перекидываются в backup архив на другой ПК, который служит для хранения логов (Backup).
На Backup логи в архиве хранятся в папке с именем ПК
.... если их в папках на ПК нет, то поиск в backup архивах с этих ПК и извлечении данных файлов в папку с названием лога. »
KamikadZZe
20-10-2020, 21:20
@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
Вы не изложили четко постановку задачи. »
Прошу прощения если не совсем корректно описал задачу!
Написал часть кода по копированию, но не совсем получилось что хотел.
Получается что копирует файл и тут же его перезаписывает.
Посмотрите пожалуйста что я не так сделал?!
Сам код:
@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, используйте для кода тег code #. А то не особенно удобно читать код размазанный в текст.
не решена ветка »
megaloman, в список компов в FOR я добавил пункт "backup" из расчета потом сделать для него отдельный кусок, а потом - забыл :lol: не представляю как я так умудрился, скорей всего куда-то меня кто-то отвлек...
KamikadZZe
21-10-2020, 10:05
используйте для кода тег 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
Доброго времени суток!
Ребят, по задаче нет пока решений?
megaloman
23-10-2020, 17:36
Доброго времени суток! А постановку так и не возможно разъяснить, а не предоставлять собственный нерабочий код, из которого надо еще и постановку вытащить. В соответствии с Вашей постановкой в заголовке, ИМХО, задача решена.
KamikadZZe
23-10-2020, 18:21
Доброго времени суток! А постановку так и не возможно разъяснить, а не предоставлять собственный нерабочий код, из которого надо еще и постановку вытащить »
Есть 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
Есть несколько серверов.
Серверы могут идентифицироваться как именами, например: 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
@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
Ребят, большая благодарность за помощь, в особенности Elven и Megaloman!
Megaloman, отдельный респект, за постановку задачи и варианты решения!
1. При использовании данного варианта: Вариант решения - к имени файлов добавляются имена серверов »
@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
KamikadZZe, Вы поставили задачу, я всего лишь "причесал" постановку, изложил для себя более последовательно.
Вы применяете мои командные файлы не в соответствии с постановкой, пытаетесь их тестировать на своём компьютере.
Но в постановке - серверы должны быть разные. Как вариант, чтобы протестировать на своём компьютере, наверняка у компьютера есть и свой IP, и сетевое имя,Set "AllComp=127.0.0.1 192.168.100.23 Max-ПК"И добавлять к этим именам пути папок нельзя. Обратите внимание, при наличии кириллицы в именах, командный файл должен быть сохранен в 866 кодировке. Естественно, Вы будете копировать один и тот же файл со своего компьютера, но моделировать ситуацию с тремя серверами с разными адресами/именами можно. И, по условиям Вашей постановки, расположение папки с логами на разных серверах одинаковое, например:Set "LogFolder=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
В папке, где хранятся старые бэкапы соответственно должны содержаться подпапки с правильными именами, совпадающими с указанными Вами в списке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-ПК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
Всем доброго времени суток!
Megaloman - Благодарю за пояснение и за помощь!!!
По поводу копирования логов с боевых серверов: Set "AllComp=127.0.0.1 192.168.100.23 Max-ПК"
Все работает как часики. Огромнейшая благодарность!
Если такой подход Вас не устраивает, уточняйте постановку. »
Но вот по поводу 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
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
дайте постановку четкую, я Вас об этом постоянно уговариваю.
Мазохист уговаривает садиста: мучай меня, мучай! А садист в ответ: не буду, не буду! »
Приветствую!
Прошу прощения если я не четко и не конкретно объясняюсь!
Вроде пытаюсь все максимально приближено объяснить.
Т.к. каждый день в 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).
каждый день в 00:00:00 создается новый лог-файл »
при отсутствии необходимого лог-файла YYYY-MM-DD.XX.YYYYYYYY.log (например: 2020-09-17.gw.uniroll.log) на серверах: »
- что будет проверять всё на отсутствие всех возможных логов?
- когда должна происходить такая проверка, сразу после создания лога или в пределах 3-х дней?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.