@alexpebody
IT - lifestyle

Хранение файлов за 2 месяца + 1 файл первого числа месяца?

Доброго всем дня! Друзья, если не сложно, кто знает... Задача: есть куча файлов бэкапов, требуется сохранять 1 файл за 1е число каждого месяца, а также бэкапы за последние 2 месяца за каждый день.

По факту, сделать хранение за 2 месяца проще простого:

forfiles -p "C:\some_folder" -s -m *.* -d -60 -c "cmd /c del /q @path"

REM -- moving 1st of month folders to temp\
forfiles  /M *_FULL_20*01_*.csv  /C "cmd /c move @path temp\ "

REM -- deleting files older than 30 days
forfiles  /M *_FULL_20*.csv  /D -30   /C "cmd /c del /s /q @path "

REM -- bringing back temp\ to this folder
forfiles  /P temp\  /C "cmd /c move @path ..\ "


Если грубо можно сделать так:
forfiles -p "c:\folder" -s -m *.* -d -1 -c "cmd /c copy @path c:\folder\1st_dates"
forfiles -p "c:\folder" -s -m *.* -d -60 -c "cmd /c del /q @path"


Есть более практичная структура?
  • Вопрос задан
  • 194 просмотра
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
Можно вызывать в cmd конвеер, в котором попытаться отфильтровать файлы за первое число.
Примерно что-то такое:
forfiles -p "c:\folder" -s -m *.* -d -1 -c "cmd /c (dir @path | findstr /v /r /c:"тут регулярное выражение для поиска 1 дня в дате") && del /q @path"

Это лишь схема, как можно подойти к решению. Ничего не отлаживал.
Конвеер можно отладить отдельно, запихнув его в батник или прямо из командной строки.
Сформировать регулярное выражение, думаю, будет не трудно. Я давно ими не пользовался, так что выветрилось из головы, а вспоминать лень.
Вижу некоторые трудности со вложенными кавычками, возможно надо как-то их экранировать. Может что-то по этому поводу есть в справке по forfiles.
Кстати, формат вывода даты в dir зависит от системных настроек формата даты, так что на разных компах он может быть разным. Имейте это ввиду. cmd не умеет работать с датами, поэтому приходится использовать только возможности работы со строками.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы