Войти

Показать полную графическую версию : [решено] Копирование файлов с одинаковым именем с разных ПК или с backup архива


Страниц : 1 [2]

megaloman
31-10-2020, 19:48
С именами серверов@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
Доброго времени суток всем форумчанам!
Megaloman, ОГРОМНЕЙШАЯ БЛАГОДАРНОСТЬ за помощь в постановке и решении моей задачи!!!!
Просто Гений!!!
Поиск в rar »
Работает как швейцарские часы!

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

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

KamikadZZe
26-11-2020, 14:21
Доброго времени суток!
Поиск в 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
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"
.......
итд.

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

Приведенный код хотел подстроить под данную постановку:
]@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"[/OFF]
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


В дополнение:
На каждом сервере в указанную папку ежедневно создаются файлы имя.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
Серверы могут идентифицироваться как именами ....так и по 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
Это я понимаю.
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
@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
Доброго времени суток!
Вот вариант. Ставится реальное имя сервера либо его IP наименованиям условно архивных папок »
Megaloman, благодарю за помощь!
Очень признателен за вашу помощь!!!
Копирование с серверов и из папок с архивами код выполняет на ура.

Единственный нюанс, который не сработал, не удалось скопировать все файлы одного формата в течении дня.
Файлов 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
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
Доброго времени суток!
Вот модификация решения под такую постановку »
Уважаемый Megaloman, благодарю за помощь!




© OSzone.net 2001-2012