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

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

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

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


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

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


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

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

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

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

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

 

Аватара для Elven

Ветеран


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

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


Код: Выделить весь код
@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
)

Последний раз редактировалось Elven, 20-10-2020 в 17:31.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:08, 20-10-2020 | #2



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

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


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Elven:
podp »
Код: Выделить весь код
popd

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:36, 20-10-2020 | #3


Аватара для Elven

Ветеран


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

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


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

Последний раз редактировалось Elven, 20-10-2020 в 20:00.


Отправлено: 17:32, 20-10-2020 | #4


Ветеран


Contributor


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

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


Код: Выделить весь код
@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 архивах с этих ПК и извлечении данных файлов в папку с названием лога. »

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

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:52, 20-10-2020 | #5


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


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

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


Цитата 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-х дневной давности.

Отправлено: 21:20, 20-10-2020 | #6


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


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

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


Цитата 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-х дневной давности.

Отправлено: 22:15, 20-10-2020 | #7


Аватара для Elven

Ветеран


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

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


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

Отправлено: 06:48, 21-10-2020 | #8


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


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

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


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

Отправлено: 10:05, 21-10-2020 | #9


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


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

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


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

Отправлено: 17:32, 23-10-2020 | #10



Компьютерный форум 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




 
Переход