Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Копирование файлов с одинаковым именем с разных ПК или с backup архива

Ответить
Настройки темы
CMD/BAT - Копирование файлов с одинаковым именем с разных ПК или с backup архива

Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

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

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

Отправлено: 13:16, 20-10-2020

 

Ветеран


Contributor


Сообщения: 2152
Благодарности: 1321

Профиль | Отправить 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



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

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

Последний раз редактировалось KamikadZZe, 02-11-2020 в 22:07.


Отправлено: 22:00, 02-11-2020 | #22


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток!
Цитата 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 архива

Отправлено: 14:21, 26-11-2020 | #23


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата 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 -архивный
.......
итд.

Отправлено: 21:08, 26-11-2020 | #24


Ветеран


Contributor


Сообщения: 2152
Благодарности: 1321

Профиль | Отправить PM | Цитировать


Цитата KamikadZZe:
Серверы могут идентифицироваться как именами ....так и по IP ... либо в их комбинации[/post]
Это я понимаю.
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


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата 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 и т.д)

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

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

Отправлено: 19:37, 27-11-2020 | #26


Ветеран


Contributor


Сообщения: 2152
Благодарности: 1321

Профиль | Отправить 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


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток!
Цитата 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 -архивный
.......
итд. »
Проверял несколько раз, так и не получилось. :-(

Отправлено: 22:04, 02-12-2020 | #28


Ветеран


Contributor


Сообщения: 2152
Благодарности: 1321

Профиль | Отправить PM | Цитировать


Цитата 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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 19:49, 03-12-2020 | #29



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Копирование файлов с одинаковым именем с разных ПК или с backup архива

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] Завершение всех процессов с одинаковым именем, если их больше 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




 
Переход