|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Копирование файлов с одинаковым именем с разных ПК или с backup архива |
|
|
CMD/BAT - [решено] Копирование файлов с одинаковым именем с разных ПК или с backup архива
|
Новый участник Сообщения: 24 |
Доброго времени суток!
Есть несколько ПК. В моем случае их пока 6. На них запущена одна и та же программа. Программа ведет логирование в папку log на каждом ПК. Все логи на 6-ти ПК имеют одно и тоже название. Кроме того, логи старше нескольких дней перекидываются в backup архив на другой ПК, который служит для хранения логов (Backup). На Backup логи в архиве хранятся в папке с именем ПК Т.к. бывает необходимо найти лог с определенным именем на всех ПК или на Backup и собрать их в папку (папка с названием лога) для проверки или передачи: Прошу помощи в написании bat-ника для поиска файлов с определенным именем (одинаковое имя файла) на разных ПК, а если их в папках на ПК нет, то поиск в backup архивах с этих ПК и извлечении данных файлов в папку с названием лога. Т.к. данные файлы носят одинаковое имя, то необходимо их нумеровать (имя файла_001, имя файла_002 и т.д.) или же дописывать к имени файла имя ПК. |
|
Отправлено: 13:16, 20-10-2020 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Поиск в 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") )) |
------- Последний раз редактировалось megaloman, 01-11-2020 в 18:47. Отправлено: 19:48, 31-10-2020 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать Доброго времени суток всем форумчанам!
Megaloman, ОГРОМНЕЙШАЯ БЛАГОДАРНОСТЬ за помощь в постановке и решении моей задачи!!!! Просто Гений!!! Цитата megaloman:
Я бы наверное ковырялся еще полгода, потом плюнул и продолжал далее делать все вручную или пользовался тем что есть. Всем кто не остался равнодушным и тоже пытался помочь, тоже ОГРОМНЕЙШАЯ БЛАГОДАРНОСТЬ! Вопрос считаю решенным, а тему закрытой! |
|
Последний раз редактировалось KamikadZZe, 02-11-2020 в 22:07. Отправлено: 22:00, 02-11-2020 | #22 |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать Доброго времени суток!
Цитата 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 архива |
|
Отправлено: 14:21, 26-11-2020 | #23 |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Есть несколько серверов. Серверы могут идентифицироваться как именами, например: 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:
2020-10-22.gw.uniroll.log - основной 2020-10-22.gw.uniroll_0.log -архивный 2020-10-22.gw.uniroll_1.log -архивный ....... итд. |
||
Отправлено: 21:08, 26-11-2020 | #24 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата KamikadZZe:
Server1 192.168.1.208 Server2 Server3 192.168.1.121 192.168.1.15 Не понимаю, как это связано с app001 app002 app003 app004 app005 app006 |
|
------- Отправлено: 21:48, 26-11-2020 | #25 |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
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 и т.д) Поэтому хотел адаптировать коды (под рабочую среду). Пытался изменить код сам, но получил не то что хотел! |
|
Отправлено: 19:37, 27-11-2020 | #26 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Вот вариант. Ставится реальное имя сервера либо его 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
|
------- Отправлено: 18:05, 28-11-2020 | #27 |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать Доброго времени суток!
Цитата megaloman:
Очень признателен за вашу помощь!!! Копирование с серверов и из папок с архивами код выполняет на ура. Единственный нюанс, который не сработал, не удалось скопировать все файлы одного формата в течении дня. Цитата KamikadZZe:
|
||
Отправлено: 22:04, 02-12-2020 | #28 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата KamikadZZe:
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 |
|
------- Отправлено: 19:49, 03-12-2020 | #29 |
Новый участник Сообщения: 24
|
Профиль | Отправить PM | Цитировать Доброго времени суток!
Цитата megaloman:
|
|
Отправлено: 19:16, 21-12-2020 | #30 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - [решено] Завершение всех процессов с одинаковым именем, если их больше 2 | santey007 | Скриптовые языки администрирования Windows | 13 | 03-02-2020 07:24 | |
upload большого архива или десятков больших файлов в облака | algusev | Хочу все знать | 7 | 02-08-2019 14:47 | |
CMD/BAT - Копирование файлов из разных папок | yamixon | Скриптовые языки администрирования Windows | 0 | 14-12-2016 15:34 | |
Доступ - Сетевой доступ с одинаковым именем пользователя | AlexeyA | Microsoft Windows 10 | 6 | 01-09-2016 19:15 | |
Прочее - [решено] 2 ПК с одинаковым именем | krokradio | Сетевые технологии | 2 | 04-02-2014 15:05 |
|