|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление созданных папок и файлов по времени |
|
|
CMD/BAT - [решено] Удаление созданных папок и файлов по времени
|
Старожил Сообщения: 157 |
Всем добрый день!!!!
есть необходимость дописать скрипт, я в этом деле не мастер, но вот сейчас понадобилось. Вот существующий 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. Заранее всем благодарен!!!! |
|
Отправлено: 14:32, 03-07-2009 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата zavoruev:
@Echo Off :: Параметры скрипта, 0 < $OLD < 29! :: $OLD - столько ДНЕЙ храним архивы Set $SRC=D:\Mazda Set $DST=D:\Backup Set $OLD=6 :: Находим текущие день/месяц/год 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 %$SRC%\* %$DST%\%$D%.%$M%.%$Y:~-2%\ :: Удаляем старые архивные каталоги Call :GetOldDate %$OLD% For /F "Tokens=1-3 Delims=." %%i In ('DIR /B/A:D %$DST%\??.??.??') Do If %%k%%j%%i LEQ %$Y:~-2%%$M%%$D% RD /S/Q "%$DST%\%%i.%%j.%%k" :: Выход EXIT :GetOldDate :: ----------------------------------- :: Расчет даты, предшествующей текущей :: заданное количество дней (< 29) :: ----------------------------------- Set /A $D -= %1 If %$D% GTR 0 GoTo GetOldDate_2 :: Месяц, год, дней в месяце Set /A $M=%$M%+11-((%$M%+10)/12)*12 If %$M% EQU 12 Set /A $Y-=1 For /F "Tokens=%$M%" %%i In ("31 28 31 30 31 30 31 31 30 31 30 31") Do Set $X=%%i If %$M% NEQ 2 GoTo GetOldDate_1 :: Февраль високосного года Set /A $B1=%$Y%-(%$Y%/4)*4 Set /A $B2=%$Y%-(%$Y%/100)*100 Set /A $B3=%$Y%-(%$Y%/400)*400 If 0 EQU %$B1% If 0 NEQ %$B2% Set /A $X+=1 If 0 EQU %$B3% Set /A $X+=1 :: День месяца :GetOldDate_1 Set /A $D=%$D%+%$X%-((%$D%+%$X%-1)/%$X%)*%$X% :: Форматирование даты :GetOldDate_2 Set $M=0%$M%&Set $D=0%$D% Set $M=%$M:~-2%&Set $D=%$D:~-2% GoTo :EOF @Echo Off SetLocal EnableDelayedExpansion :: ЧТО и КУДА копируем, сколько храним :: $OLD - КОЛИЧЕСТВО хранимых архивов Set $SRC=D:\Mazda Set $DST=D:\Backup Set $OLD=6 :: Находим текущие день/месяц/год 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 %$SRC%\* %$DST%\%$D%.%$M%.%$Y:~-2%\ :: Ограничиваем количество архивов For /F "Delims=" %%i In ('DIR /B/O:-D/A:D %$DST%\??.??.??') Do ( Set /A $OLD-=1 If !$OLD! LSS 0 RD /S/Q "%$DST%\%%i" ) |
|
Отправлено: 10:09, 04-07-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 157
|
Профиль | Отправить PM | Цитировать amel27,
спасибо тебе огромное! Есть пару вопросов: 1. Цитата amel27:
2. Цитата amel27:
3. Если у меня в папке D:\Backup\ есть не только папки созданные этим скриптом, но и архивы, которые делаются по другому шедулеру (с помощью winrar делается бэкап только нужных папок). Как будет работать последняя часть скрипта на удалении? Будет удалять тока создаваемы архивы, или ограничение идет для все папки. P.S. Или все таки лучше папки и архивы разнести ао разным папкам в корне диска D:\ |
||
Последний раз редактировалось zavoruev, 06-07-2009 в 10:52. Отправлено: 09:21, 06-07-2009 | #3 |
Старожил Сообщения: 157
|
Профиль | Отправить PM | Цитировать И еще одно, формат создаваемого каталога должен выглядеть так 06.07.2009, а при использовании данных скриптов 06.07.09. Как это поправить?
|
Отправлено: 09:36, 06-07-2009 | #4 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать 1. к последнему, в нем дата - из атрибутов каталога, в первом - восстановлена из его имени
2. 1) "@Echo Off" --> "@Echo On"; 2) "Script.CMD >Script.Log 2>&1"; 3) Script.Log - в студию! 3. батник обрабатывает только каталоги по маске "??.??.??" (с изменениями - "??.??.????") Цитата zavoruev:
Цитата zavoruev:
@Echo Off SetLocal EnableDelayedExpansion :: ЧТО и КУДА копируем, сколько храним Set $SRC=D:\Mazda Set $DST=D:\Backup Set $OLD=6 :: Находим текущие день/месяц/год 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 %$SRC%\* %$DST%\%$D%.%$M%.%$Y%\ :: Ограничиваем количество архивов For /F "Tokens=1-3 Delims=." %%i In ('DIR /B/A:D %$DST%\??.??.????') Do Set $_%%k%%j%%i=%%i.%%j.%%k For /F "Tokens=2 Delims==" %%i In ('Set $_^|Sort /R') Do ( Set /A $OLD-=1 If !$OLD! LSS 0 RD /S/Q "%$DST%\%%i" ) |
|||
Отправлено: 11:20, 06-07-2009 | #5 |
Старожил Сообщения: 157
|
Профиль | Отправить PM | Цитировать Вы уж извените, но я не пишу скрипты, и мне нужно по подробней обозначить процессы. Давайте по очереди:
1. Сейчас разговаривал с программистом 1С, он говорит что ему необходимы архивы давностью за прошедший месяц, т.е с 1-30(31,28) (в зависимости от месяца, и архивы не делаются в субботу и воскресенье). Получается что значение Set $OLD должно быть в зависимости от месяца. Этот скрипт выполняется ночью в 3.30. 2. Далее в конце каждого месяца где-то в 00.30 (думаю 3 часа хватит на архивацию) должен выполняться скрипт (я думаю Winrar) на архивацию всех этих папок с последующим удаление (параметр М), и переносом архива в другой каталог (храняться до 3-х лет). Если есть другие варианты то подскажите!!!! Т.е вариант с удаление папок отпал, базы нужны, так сказало руководство. |
Последний раз редактировалось zavoruev, 06-07-2009 в 13:57. Отправлено: 11:48, 06-07-2009 | #6 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата zavoruev:
Цитата zavoruev:
- один скрипт (типа того, что в первом посте) тупо копирует каталоги, этот скрипт планируется на ежедневное выполнение (кроме выходных, в 3.30) @Echo Off Set $SRC=D:\Mazda Set $DST=D:\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 %$SRC%\* %$DST%\%$D%.%$M%.%$Y%\ |
||
Отправлено: 17:11, 06-07-2009 | #7 |
Старожил Сообщения: 157
|
Профиль | Отправить PM | Цитировать Это все понятно, спасибо!!! Просто на будущее,
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 или нет, опишите вот это, не понятно???? ) Заранее огромное человеческое Спасибо |
Отправлено: 17:49, 06-07-2009 | #8 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать zavoruev, всё можно... важней понять, что нужно
1. для такой постановки $OLD не требуется, т.к. сравнение всегда идет с 1-м числом месяца @Echo Off Set $SRC=D:\Mazda Set $DST=D:\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 %$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 RD /S/Q "%$DST%\%%i.%%j.%%k" |
Последний раз редактировалось amel27, 07-07-2009 в 14:20. Причина: очепятка Отправлено: 11:35, 07-07-2009 | #9 |
Старожил Сообщения: 157
|
Профиль | Отправить PM | Цитировать Всем добрый день!!!! Имеется скрипт на Удаление предварительно созданных папок и файлов с 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" |
Отправлено: 14:29, 06-08-2009 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Удаление папок по критериям | jentoso | Скриптовые языки администрирования Windows | 16 | 17-06-2009 11:38 | |
Любой язык - [решено] удаление файлов по маске, созданных за прошлые сутки | BRAT2 | Скриптовые языки администрирования Windows | 1 | 06-04-2009 08:51 | |
VBS/WSH/JS - [решено] Удаление файлов созданных ранее текущей даты на неделю | KillHunter | Скриптовые языки администрирования Windows | 5 | 06-03-2009 12:23 | |
[решено] Удаление файлов и папок | ArGoth | Автоматическая установка Windows 2000/XP/2003 | 1 | 26-05-2008 18:03 | |
Удаление всех папок и файлов из папки c:\Temp | DIKPro | Microsoft Windows NT/2000/2003 | 10 | 15-08-2006 16:20 |
|