|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] удалить все папки в директории, которые меньше текущего месяца |
|
CMD/BAT - [решено] удалить все папки в директории, которые меньше текущего месяца
|
Новый участник Сообщения: 5 |
Профиль | Отправить PM | Цитировать Здравствуйте.
Возник вопрос по решению вот такой задачи: Структура папок: accounts name1 inbox 2011_10_12 2011_10_13 outbox 2011_10_12 2011_10_13 logs name2 inbox 2011_10_12 2011_10_13 outbox 2011_10_12 2011_10_13 logs т.е. если мы запустили файл 30.10.2011 то удалить все папки кроме: 2011_10_* Пока реализовал только получение списка папок, не получается создать условие на удаление. В данном случае %%a содержит полный путь к папке+название папки |
|
Отправлено: 16:46, 07-10-2011 |
Ветеран Сообщения: 723
|
Профиль | Сайт | Отправить PM | Цитировать Попробуйте на PowerShell.
вот тут есть секция и еще примеры. $Path = "C:\temp" $Days = "-30" $CurrentDate = Get-Date $OldDate = $CurrentDate.AddDays($Days) Get-ChildItem $Path -Recuse | Where-Object { $_.LastWriteTime -lt $OldDate } | Remove-Item Возможно она вам подойдет. |
Отправлено: 20:25, 08-10-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать @echo off rem Если формат даты в системе дд.мм.гггг rem и формат поддиректорий гггг_мм_дд Set Where=D:\accounts Set Now=%Date:~6,4%%Date:~3,2% FOR %%f IN ("Name1" "Name2") DO FOR %%b IN ("Inbox" "Outbox") DO FOR /D %%t IN ("%Where%\%%~f\%%~b\20??_??_??.") DO Call :DelDir "%%t" GoTo :Eof :DelDir Set This=%~nx1 Set This=%This:~0,4%%This:~5,2% If %This% LSS %Now% Rd /S /Q %1 @echo off rem Если формат даты в системе дд.мм.гггг rem и формат поддиректорий гггг_мм_дд Set Where=D:\accounts Set Now=%Date:~6,4%%Date:~3,2% Call :Account "Name1" Call :Account "Name2" Call :Account "Name3" Call :Account "Name4" GoTo :Eof :Account FOR %%b IN ("Inbox" "Outbox") DO FOR /D %%t IN ("%Where%\%~1\%%~b\20??_??_??.") DO Call :DelDir "%%t" GoTo :Eof :DelDir Set This=%~nx1 Set This=%This:~0,4%%This:~5,2% If %This% LSS %Now% Rd /S /Q %1 @echo off rem Если формат даты в системе дд.мм.гггг rem и формат поддиректорий гггг_мм_дд rem и поддректории с указанными именами только в InBox и OutBox Set Where=D:\accounts Set Now=%Date:~6,4%%Date:~3,2% FOR /F "usebackq delims=" %%t IN (`Dir /S /A:D /B "%Where%\20??_??_??."`) DO Call :DelDir "%%t" GoTo :Eof :DelDir Set This=%~nx1 Set This=%This:~0,4%%This:~5,2% If %This% LSS %Now% Rd /S /Q %1 |
------- Последний раз редактировалось megaloman, 08-10-2011 в 23:50. Отправлено: 23:13, 08-10-2011 | #3 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Спасибо всем.
Использовал третий пример от megaloman. Первые два не подошли, т.к. имена аккаунтов добаляются и меняются часто. Немного дополнил пример. Вот что получилось: Задача решена. Еще раз спасибо. |
Отправлено: 10:46, 10-10-2011 | #4 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Ваше решение удалит все папки удовлетворяющие условию в директории %Dir%\accounts\*, а мое все директории в папках %Dir%\accounts\<name>\*
Просто бывают случаи когда программисты или тех.поддержа могут скопировать историю в папку accounts и не хотелось бы их затирать. По хорошему вообще бы искать только в "%Dir%\accounts\<name>\Inbox" и "%Dir%\accounts\<name>\Outbox" Можно попробовать так: но не уверен что сработает |
|
Отправлено: 10:26, 11-10-2011 | #5 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать @echo off rem Если формат даты в системе дд.мм.гггг rem и формат поддиректорий гггг_мм_дд rem во всех поддиректориях InBox OutBox Set Where=D:\Delete\Accounts Set Now=%Date:~6,4%%Date:~3,2% FOR /F "usebackq delims=" %%w IN (`Dir /S /A:D /B "%Where%\InBox." "%Where%\OutBox."`) Do FOR /F "usebackq delims=" %%t IN (`Dir /A:D /B "%%w\20??_??_??."`) DO Call :DelDir "%%w\%%t" GoTo :Eof |
------- Отправлено: 00:43, 12-10-2011 | #6 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Как удалить из папки все файлы определенного размера? | Alex_smo | Скриптовые языки администрирования Windows | 6 | 29-07-2014 19:50 | |
Любой язык - Нужно быстро (!) добавить/удалить строку во все файлы указанной директории | Possessed | Скриптовые языки администрирования Windows | 6 | 04-10-2011 22:29 | |
CMD/BAT - [решено] Как удалить все папки кроме папок с названием длиной в 14 символов? | yaoleg2 | Скриптовые языки администрирования Windows | 9 | 26-03-2011 03:49 | |
CMD/BAT - [решено] Удалить все файлы из папки кроме нужных | Sirimika | Скриптовые языки администрирования Windows | 16 | 12-11-2010 10:33 | |
Интерфейс - [решено] Нужно отобразить все пустые папки в директории | Третий | Microsoft Windows 7 | 1 | 24-08-2009 22:17 |
|