Имя пользователя:
Пароль:
 | Правила  

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

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

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


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

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


Добрый день.
Имеется следующее: "Сервер А", на котором собираются лог-файлы в 23 раздельных каталога с градацией по дням(маска названий файлов yyyyddmm.log) и "Сервер Б", куда необходимо перемещать данные файлы, так же с делением на 23 каталога (доступ в каталоги расшарен посредством smb).
Задача такова: необходимо перемещать с "Сервера А" на "Сервер Б" лог файлы по такому принципу - 11.09.2017 переместить файлы за 10.09.2017 в каждый каталог.
Как вариант, можно для каждого каталога сделать отдельный bat'ник, чтобы не городить всё это в одном файле.
Надеюсь на вашу помощь

Отправлено: 12:00, 11-09-2017

 

Ветеран


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

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


уточню, так надо?

Именно 11.09.2017 (конкретная дата) или сегодня, переместить по следующей схеме:

papka1 in
file1 10.09.2017 (будет удален)
file2 10.09.2017 (будет удален)
file1 09.09.2017
file2 09.09.2017
file3 10.08.2017
file1 10.08.2017

papka1 out
file1 10.09.2017
file2 10.09.2017

...
papka23 in
file1 10.09.2017 (будет удален)
file2 10.09.2017 (будет удален)
file1 09.09.2017
file2 09.09.2017
file3 10.08.2017
file1 10.08.2017

papka23 out
file1 10.09.2017
file2 10.09.2017

Отправлено: 13:23, 11-09-2017 | #2



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

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


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


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

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


Извиняюсь, в первом сообщении неточно описал ситуацию:
1. с "Сервера А" нужно копировать файлы на "Сервер Б", а не удалять их
2. необходимо копировать файлы за предыдущий день (поэтому для примера и взял даты текущего и пред идущего дня)

Отправлено: 13:47, 11-09-2017 | #3


Ветеран


Contributor


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

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


shadowjkee,
Цитата shadowjkee:
c Сервера А" нужно копировать файлы на "Сервер Б", »
то есть, как я понимаю, в ответе должно получиться, что на "Сервере Б" должны содержаться все файлы, что на "Сервере A", за исключением файлов за сегодняшний день. Вот вариант, который это делает:
Копирует все файлы по указанной маске, но при этом:
1. Не копируется файл с именем сегодняшнего дня.
2. Не копируются файлы, уже имеющиеся на "Сервере Б". При ежедневном копировании в норме будут копироваться только файлы вчерашнего дня.
Предполагается, что дата в системе отображается в виде дд.мм.гггг

Для каждой папки вызовите в батнике процедуру :Copir
Код: Выделить весь код
@Echo Off

Set "Maska=20??????.log"
Set "ToDayFile=%Date:~6,4%%Date:~3,2%%Date:~0,2%.log"

Call :Copir "Z:\Box_In\папка 1" "Z:\Box_Out\папка 1" 
Call :Copir "Z:\Box_In\папка 2" "Z:\Box_Out\папка 2" 

GoTo :Eof

:Copir
	For %%f IN ("%~1\%Maska%") DO (
		If Not "%%~nxf"=="%ToDayFile%" If Not Exist "%~2\%%~nxf" (
			Copy "%%f" "%~2\" >nul
		)
	)
GoTo :Eof

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


Последний раз редактировалось megaloman, 11-09-2017 в 15:39.

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

Отправлено: 15:33, 11-09-2017 | #4


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


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

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


Спасибо, скрипт работает. Правда есть одно уточнение: на "Сервере Б" эти файлы не сохраняются, а сразу перехватываются обработчиком и удаляются из каталогов. как в таком случае будет проходить проверка на "2. Не копируются файлы, уже имеющиеся на "Сервере Б"."?

Отправлено: 06:42, 12-09-2017 | #5


Ветеран


Contributor


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

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


Цитата shadowjkee:
Правда есть одно уточнение: на "Сервере Б" эти файлы не сохраняются, а сразу перехватываются обработчиком и удаляются из каталогов. как в таком случае будет проходить проверка на "2. »
Да никак, все файлы, кроме сегодняшних, в таких условиях будут копироваться. Смысл задачи был до конца не прописан.
Вот вариант, который скопирует файл предыдущего рабочего дня. Если это было вчера - значит, вчерашний. Анализ даты - на основе имени файла формата ггггммдд.log.
Код: Выделить весь код
@Echo Off

Set "Maska=20??????.log"
Set "ToDayFile=%Date:~6,4%%Date:~3,2%%Date:~0,2%.log"

Call :Copir "Z:\Box_In\папка 1" "Z:\Box_Out\папка 1" 
Call :Copir "Z:\Box_In\папка 2" "Z:\Box_Out\папка 2" 

GoTo :Eof

:Copir
	For /F "usebackq delims=" %%f IN (`Dir "%~1\%Maska%" /B /A:-D /O:-N 2^>nul`) DO (
		If /I Not "%%~nxf"=="%ToDayFile%" (
			Copy "%~1\%%f" "%~2\" >nul
			GoTo :Eof
		)
	)
GoTo :Eof
Я убрал здесь проверку наличия скопированного файла, так так
Цитата shadowjkee:
эти файлы не сохраняются, а сразу перехватываются обработчиком и удаляются из каталогов »
так что при повторном запуске батника при наличии файла на "Сервере Б" он будет переписан. В принципе, проверку можно вернуть.

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

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

Отправлено: 12:33, 12-09-2017 | #6

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


Цитата shadowjkee:
маска названий файлов yyyyddmm »
Всё равно маска не dd.mm.yyyy, т.е. создаёте сами. И лучше бы yyyymmdd — проще и смотреть по порядку, и обрабатывать.

-------
Mikhail Zhilin

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

Отправлено: 12:41, 12-09-2017 | #7


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


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

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


megaloman, ой. действительно. перепутал формат имени лог-файлов. верный формат - yyyymmdd.log . Видимо глаза совсем замылились

Отправлено: 13:19, 12-09-2017 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] Копирование файлов в новую папку lakdi Скриптовые языки администрирования Windows 1 26-01-2016 19:33
CMD/BAT - [решено] Поиск фалов по содержимому и копирование найденных файлов в папку Randow Скриптовые языки администрирования Windows 6 05-05-2015 22:31
CMD/BAT - Копирование файлов по маске за текущую дату или пропуская ранее скопированные файлы jastreb83 Скриптовые языки администрирования Windows 3 19-08-2014 13:36
CMD/BAT - [решено] Копирование файлов по маске за вчерашний день dvassilyev Скриптовые языки администрирования Windows 8 19-10-2011 19:36
По smb видно ограниченное количество файлов. Igor_I Общий по FreeBSD 12 27-11-2005 18:08




 
Переход