![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] удалить все папки в директории, которые меньше текущего месяца |
|
CMD/BAT - [решено] удалить все папки в директории, которые меньше текущего месяца
|
Новый участник Сообщения: 5 |
Здравствуйте.
Возник вопрос по решению вот такой задачи: Структура папок: 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 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2735
|
Профиль | Отправить 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 |
Ветеран Сообщения: 2735
|
Профиль | Отправить 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 |
|