Войти

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


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

alpap
11-09-2017, 13:23
уточню, так надо?

Именно 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

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

megaloman
11-09-2017, 15:33
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

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

megaloman
12-09-2017, 12:33
Правда есть одно уточнение: на "Сервере Б" эти файлы не сохраняются, а сразу перехватываются обработчиком и удаляются из каталогов. как в таком случае будет проходить проверка на "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
Я убрал здесь проверку наличия скопированного файла, так так эти файлы не сохраняются, а сразу перехватываются обработчиком и удаляются из каталогов » так что при повторном запуске батника при наличии файла на "Сервере Б" он будет переписан. В принципе, проверку можно вернуть.

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

shadowjkee
12-09-2017, 13:19
megaloman, ой. действительно. перепутал формат имени лог-файлов. верный формат - yyyymmdd.log . Видимо глаза совсем замылились :)




© OSzone.net 2001-2012