Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - создание bat файла для удаления старых папок

Ответить
Настройки темы
CMD/BAT - создание bat файла для удаления старых папок

Новый участник


Сообщения: 22
Благодарности: 1

Профиль | Отправить PM | Цитировать


Задача заключается в том, чтобы удалять папки вида ??.??.???? (соответственно вместо вопросиков - дата число.месяц.год)
Есть путь D:\1cBackupElena\v77BackupElena.
Там хранятся папки которые создаются каждый день с помощью батников, которые запускаются в определенное время планировщиком заданий windows 7.
В папках лежат архивы. Баз 1с много, поэтому при запуске батника создается папка с именем ??.??.????, а в ней архивы 7z от каждой базы (то, что как раз с помощью батников создается. Понятное дело, если даже месяц не удалять старые папки с архивами 1С (бэкапами), то жесткого диска не хватит. Поэтому встал вопрос написать батник, который будет работать под планировщиком заданий и удалять папки недельной давности (или другой давности).
Надыбал в просторах скриптик, но он удаляет файлы. Вот код:
@Echo Off
SetLocal enabledelayedexpansion
Set papka=D:\1cBackupElena\v82BackupElena
ForFiles -p %papka% -s -m *.* -d -3 -c "cmd /c del /q @path"
Коротенький, но мне нужно удалять папки с архивами по названию (ну или по дате, специалисты, молю, подскажите как лучше)

Отправлено: 18:25, 06-04-2015

 

Пользователь


Сообщения: 70
Благодарности: 19

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion

set minus_days=7
Set papka=D:\1cBackupElena\v82BackupElena

set _dt=!DATE!
 rem set _dt=01.07.2012
set _dt=%_dt:~-10%

set _day=%_dt:~0,2%
set mon=%_dt:~3,2%
set year=%_dt:~6,4%


if %_day% LSS 10 set _day=%_day:~1%
if %mon% LSS 10 set mon=%mon:~1%

set /A _day-=%minus_days%

 rem echo _day=!_day!

if %_day% LSS 0 (
 set /A mon-=1
 if !mon!==0 (
   set mon=12
   set /A year-=1
 )

 if !mon!==2 (
   set /A ost=%year% %% 4
   if !ost!==0 (set /A _day=29+_day) else (set /A _day=28+_day)
   echo ost=!ost!
 ) else (
   set /A _day=31+_day
   for %%m in (4 6 9 11) do if !mon!==%%m set /A _day=_day-1
 )

)

if %_day% LSS 10 set _day=0%_day%
if %mon% LSS 10 set mon=0%mon%

set old=%year%-%mon%-%_day%
echo old=%old%

for /D %%f in (%papka%\*.*) do (
  if not %%f==%0 (
    set dat=_%%~nxf
    set dat=!dat:~7,4!-!dat:~4,2!-!dat:~1,2!
    if !dat! LEQ %old% (
      rd /s /q %%f
    )
  )
)
Похожую задачу я делал в 2012 году, только там надо было удалять устаревшие файлы по дате изменения файла. Так что пришлось только отыскать тот батник и немножко его модифицировать. В принципе, можно ориентироваться не на имя каталога, а на время изменения. Для этого нужно будет заменить строку
Код: Выделить весь код
    set dat=_%%~nxf
на
Код: Выделить весь код
    set dat=_%%~tf
, как было изначально в том моём батнике.

-------
Разумный человек приспосабливается к миру, неразумный пытается приспособить мир к себе. Поэтому прогресс делают люди неразумные. (Дж. Б. Шоу)


Последний раз редактировалось Гуллипут, 06-04-2015 в 21:48. Причина: Дополнение

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:43, 06-04-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 22
Благодарности: 1

Профиль | Отправить PM | Цитировать


Огромное спасибо тебе камрад! Выручил, осталось только на рабочей машинке проверить работу скрипта)

Отправлено: 11:21, 08-04-2015 | #3


Ветеран


Сообщения: 545
Благодарности: 36

Профиль | Сайт | Отправить PM | Цитировать


Код: Выделить весь код
cd /d D:\1cBackupElena\v77BackupElena 
rar32 m -m0  -to7d -r %temp%архив_который_удалим.rar   *.*
del %temp%\архив_который_удалим.rar
рар по-быстрому переместит файлы, старше 7 дней в архив, который потом грохаем.
далее удалить пустые папки командой rd. не пустые папки не удалятся.

три строчки.

-------
консольный клиент telegram для Windows: www.elapser.info


Отправлено: 20:35, 13-04-2015 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Опиум:
рар по-быстрому переместит файлы »
WinRAR надо ещё купить .

Отправлено: 21:22, 13-04-2015 | #5


Ветеран


Сообщения: 545
Благодарности: 36

Профиль | Сайт | Отправить PM | Цитировать


Iska, хорошо) используем robocopy /MINAGE:7 /MOV

-------
консольный клиент telegram для Windows: www.elapser.info


Отправлено: 23:03, 13-04-2015 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - создание bat файла для удаления старых папок

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Скрипт для удаления старых файлов и папок из определенной папки avfiga Скриптовые языки администрирования Windows 71 07-01-2023 18:50
CMD/BAT - [решено] Нужен bat-ник для поиска и удаления файлов и папок по маске Nun-Nun Скриптовые языки администрирования Windows 14 08-11-2014 09:53
Прочие - Создание bat файла для резерного копирования данных с помощью акрониса Beren Программное обеспечение Windows 0 02-10-2012 10:35
CMD/BAT - Нужен bat для удаления ИЗМЕНЁННЫХ папок и программ (ярлыков) из меню "Пуск-Программы" Nun-Nun Скриптовые языки администрирования Windows 15 18-03-2011 10:14
CMD/BAT - [решено] Создание CMD/BAT файла для удаления лишних папок Vsirf Скриптовые языки администрирования Windows 4 04-06-2009 20:37




 
Переход