![]() |
Удаление созданных папок и файлов по времени
Всем добрый день!!!!
есть необходимость дописать скрипт, я в этом деле не мастер, но вот сейчас понадобилось. Вот существующий for /f "tokens=5,7,6 delims=_ " %%i in ('date /t') do (set date = %%i-%%j-%%k) echo %date% set new_name=%date% echo %new_name% Mkdir d:\Backup\%new_name% CD /D d:\Backup\%new_name% Xcopy d:\mazda /S /E Суть такова, делается папка с названием даты (число, месяц, год), необходимо чтобы после отрабатывания вот этого скрипта удалялись папки недельной давности отсчетом от вновь созданного. Например: Сегодня создалась утром папка 03.07.09, а уавтоматом удалилась 27.06.09. Заранее всем благодарен!!!! |
Цитата:
Код:
@Echo Off Код:
@Echo Off |
amel27,
спасибо тебе огромное! Есть пару вопросов: 1. Цитата:
2. Цитата:
3. Если у меня в папке D:\Backup\ есть не только папки созданные этим скриптом, но и архивы, которые делаются по другому шедулеру (с помощью winrar делается бэкап только нужных папок). Как будет работать последняя часть скрипта на удалении? Будет удалять тока создаваемы архивы, или ограничение идет для все папки. P.S. Или все таки лучше папки и архивы разнести ао разным папкам в корне диска D:\ |
И еще одно, формат создаваемого каталога должен выглядеть так 06.07.2009, а при использовании данных скриптов 06.07.09. Как это поправить?
|
1. к последнему, в нем дата - из атрибутов каталога, в первом - восстановлена из его имени
2. 1) "@Echo Off" --> "@Echo On"; 2) "Script.CMD >Script.Log 2>&1"; 3) Script.Log - в студию! 3. батник обрабатывает только каталоги по маске "??.??.??" (с изменениями - "??.??.????") Цитата:
Цитата:
Код:
@Echo Off |
Вы уж извените, но я не пишу скрипты, и мне нужно по подробней обозначить процессы. Давайте по очереди:
1. Сейчас разговаривал с программистом 1С, он говорит что ему необходимы архивы давностью за прошедший месяц, т.е с 1-30(31,28) (в зависимости от месяца, и архивы не делаются в субботу и воскресенье). Получается что значение Set $OLD должно быть в зависимости от месяца. Этот скрипт выполняется ночью в 3.30. 2. Далее в конце каждого месяца где-то в 00.30 (думаю 3 часа хватит на архивацию) должен выполняться скрипт (я думаю Winrar) на архивацию всех этих папок с последующим удаление (параметр М), и переносом архива в другой каталог (храняться до 3-х лет). Если есть другие варианты то подскажите!!!! Т.е вариант с удаление папок отпал, базы нужны, так сказало руководство. |
Цитата:
Цитата:
- один скрипт (типа того, что в первом посте) тупо копирует каталоги, этот скрипт планируется на ежедневное выполнение (кроме выходных, в 3.30) Код:
@Echo Off |
Это все понятно, спасибо!!! Просто на будущее,
1. может ли значение Set $OLD выбирать в зависимости от месяца, допустип в феврале 28 дней Set $OLD =28, июне Set $OLD =30. И вот исходя из этой переменной удаляться последние записи прошлого месяца (т.е февраль, 28 дней -----> при наступлении 1 числа марта будет удаляться бэкап с 1 по 31 января; при наступлении 1 апреля, удаляются бэкапы с 1 по 28 февраля). Возможно ли это реализовать, и если да, то как????? 2. Может ли значение Set $OLD во обоих скриптах быть больше 29 (1 скрипт- удаляет папки старше dd.mm.yyyy - 29, а второй ограничивает вообще кол-во папок, если больше 29, то удаляется 1 или нет, опишите вот это, не понятно???? ) Заранее огромное человеческое Спасибо |
zavoruev, всё можно... важней понять, что нужно
1. для такой постановки $OLD не требуется, т.к. сравнение всегда идет с 1-м числом месяца Код:
@Echo Off |
Удаление предварительно созданных папок и файлов с 1-го цисла следующего месяца
Всем добрый день!!!! Имеется скрипт на Удаление предварительно созданных папок и файлов с 1-го цисла следующего месяца, но в этом месяце удаление не произошло, так как 1 и 2 числа были суббота и воскресенье, а по этим дням бэкапы не делаются!!!! подскажите как доработать скрипт чтобы таких ситуаций не возникало. Заранее спасибо!!!
Echo Off Set $SRC=D:\Mazda\2008 Set $DST=D:\Full_Backup :: Текущие день/месяц/год For /F "Tokens=1 Delims=." %%i In ('WMIC OS Get LocalDateTime^|Find "."') Do Set $Time=%%i Set $Y=%$Time:~0,4%&Set $M=0%$Time:~4,2%&Set $D=0%$Time:~6,2% Set $M=%$M:~-2%&Set $D=%$D:~-2% :: Копирование каталога XCopy /S/E/D/C/Q/exclude:C:\scripts\excludelist.txt %$SRC%\* %$DST%\%$D%.%$M%.%$Y%\ :: Дата 1-го дня предыдущего месяца Set /A $M=%$M%+11-((%$M%+10)/12)*12 Set $M=0%$M% Set $M=%$M:~-2% If %$M% EQU 12 Set /A $Y-=1 :: Удаляем старые архивные каталоги If %$D% EQU 01 For /F "Tokens=1-3 Delims=." %%i In ('DIR /B/A:D %$DST%\??.??.????') Do If %%k%%j%%i LSS %$Y%%$M%01 @Echo RD /S/Q "%$DST%\%%i.%%j.%%k" |
В скрипт не вчитывался, но возможно, что достаточно в процедуре удаления заменить условие If %$D% EQU 01 на If %$D% LEQ 03, тогда условие будет отработано 1, 2 и 3го числа, но сначала протестируйте "на кошках"
ЗЫ: По-хорошему это вопрос должен был быть задан здесь: http://forum.oszone.net/thread-144124.html |
Поменял значение LEQ 01 на LEQ 03. "Кошки" остались живы, а вот удаление так и не произошло.
PS: Тему ту создавал я,и как раз сейчас идет доработка скрипта!!!!!!!!!! |
ответил здесь >>
|
В неделе 2 выходных дня (насколько понял в шедл указано запускать только по рабочим дням), поэтому если процедура удаления будет запускаться 1го, 2го и 3го числа (не 6го как вчера или 7го, как сегодня), то как минимум один из 3х дней попадет на будни. А в этот раз Вам нужно удалить ручками.
|
Я опять тебя не понимаю!!!!! Тот топик завел я и отвечал мне на него AMEL27. Я его там задам!!!! Только скажи, ты то помочь сможешь?????
|
в августе месяце удаление июльских файлов не произошло, так как 1 и 2 числа были суббота и воскресенье, а по этим дням бэкапы не делаются!!!! подскажите как доработать скрипт чтобы таких ситуаций не возникало. Заранее спасибо!!!
Echo Off Set $SRC=D:\Mazda\2008 Set $DST=D:\Full_Backup :: Текущие день/месяц/год For /F "Tokens=1 Delims=." %%i In ('WMIC OS Get LocalDateTime^|Find "."') Do Set $Time=%%i Set $Y=%$Time:~0,4%&Set $M=0%$Time:~4,2%&Set $D=0%$Time:~6,2% Set $M=%$M:~-2%&Set $D=%$D:~-2% :: Копирование каталога XCopy /S/E/D/C/Q/exclude:C:\scripts\excludelist.txt %$SRC%\* %$DST%\%$D%.%$M%.%$Y%\ :: Дата 1-го дня предыдущего месяца Set /A $M=%$M%+11-((%$M%+10)/12)*12 Set $M=0%$M% Set $M=%$M:~-2% If %$M% EQU 12 Set /A $Y-=1 :: Удаляем старые архивные каталоги If %$D% EQU 01 For /F "Tokens=1-3 Delims=." %%i In ('DIR /B/A:D %$DST%\??.??.????') Do If %%k%%j%%i LSS %$Y%%$M%01 @Echo RD /S/Q "%$DST%\%%i.%%j.%%k" То есть поменять значение EQU 01 на EQU 03 и ждать следующего месяца?????? |
У тебя возникла проблема. Ты для нее завел тему. Сейчас ты завел вторую тему по тому же вопросу. А отвечают в темах все, у кого есть на то возможность. Потому и ответил я именно в той ветке. Если кратко повторить мой ответ - в следующий раз скрипт должен удалить, но не сегодня, т.к. уже 7е число. Чтобы скрипт отрабатывал более точно, то предложенных исправлений недостаточно.
|
Цитата:
tще в примере заметил вообще невыполняющуюся команду удаления - она просто выводится на экран. Нужно убрать "@Echo", чтобы сразу шло "RD..." далее, можно вообще убрать условие "If %$D% EQU 01", оставив "FOR...", тогда скрипт будет пытаться удалять старые каталоги при каждом запуске, т.е. каждый день. Это будет лишним временем выполнения, но тогда точно удалит. |
zavoruev, слушай NiOl, он дело говорит... :yes:
FYI: Как сообщить о том, что моя проблема решена? |
В продолжении темы, ребят пожалуйста помогите написать следующий батник. Требуется из папки сделать выборку файлов старше например 6 дней с даты создания переместить в другую папку и за архивировать. Я написал скрипт архивации но вот как по дате сделать даже и не знаю т.е как выбрать файлики лежащие в этой папке больше 6 дней.
Скрипт: setlocal ENABLEDELAYEDEXPANSION set day=%date:~0,2% set month=%date:~3,2% set year=%date:~6,4% set today=%year%%month%%day% set /a yesterday=today 7z a -tzip D:\tmp\Work\archiv_%yesterday% %fpath% *.txt del D:\tmp\Work\*.txt P.S надо сделать именно 7-zip т.к он бесплатный... |
Цитата:
Код:
@Echo Off |
amel27, спасибо большое оч помог!!! Архивирование прокатило!!! Как выбирать файлы которые старше 29 дней, мне например нужно выбрать файлы старше 280 дней и он конечно не отрабатывает. Помоги пожалуйста!!!
|
Вот скрипт, который решает Вашу задачу для любого количества дней.
Текст скрипта перенесите в блокнот, сохраните в файл с расширением .vbs, например ArcNDays.vbs Запускайте как обычный исполнимый файл (как bat, например) Скрипт использует ключи архиватора WinRar -r -архивируем с поддиректориями -df -удаляем файлы после архивации -tb -архивируем файлы старше указанного времени Скрипт вычисляет дату, отстоящую от текущей на указанное число дней и формирует командную строку с архиватором. Архиватор архивирует старые файлы в указанную директорию и удаляет исходные файлы. ' Исходные данные ' ------------------------------------------------------------------------ DirRab = "D:\Проба пера\" ' Директория, откуда забираем файлы (c \ на конце) DirArc = "D:\Проба пера.ARC\" ' Директория, куда архивируем файлы (c \ на конце) NDaysDele = 31 ' Файлы старше NDaysDele будут заархивированы и удалены Arc = """C:\Program Files\WinRar\WinRar.exe""" ' Путь к архиватору ' ------------------------------------------------------------------------ MDate = CStr(DateAdd("d",-NDaysDele,Date)) ' Дата отстоящая от текущей на NDaysDele дней Set WS = CreateObject("WScript.Shell") DateArc=Mid(MDate,7,4)+Mid(MDate,4,2)+Mid(MDate,1,2) R = WS.Run(Arc+" a -r -df -tb"+DateArc+"0001 """+DirArc+DateArc+""" """+DirRab+"*.*""", 1, True) |
megaloman, спасибо, Winrar-ром я уже делал и у меня все отлично получилось т.к у него полно своих средств для реализации данной задачи. ЩАс вин рар пришлось удалить т.к нет лицензии и требуется реализовать это с помощью 7-zip. А вот как правильно сделать это с датой я пока не придумал...
|
поднимаю тему.
Возникла проблема с правами :: Находим текущие день/месяц/год ('WMIC OS Get LocalDateTime^|Find "."') вот эта команда не работает, как можно упростить поиск текущей даты? |
Время: 09:14. |
Время: 09:14.
© OSzone.net 2001-