Войти

Показать полную графическую версию : создание bat файла для удаления старых папок


GODolubOFF
06-04-2015, 18:25
Задача заключается в том, чтобы удалять папки вида ??.??.???? (соответственно вместо вопросиков - дата число.месяц.год)
Есть путь 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"
Коротенький, но мне нужно удалять папки с архивами по названию (ну или по дате, специалисты, молю, подскажите как лучше)

Гуллипут
06-04-2015, 21:43
@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, как было изначально в том моём батнике.

GODolubOFF
08-04-2015, 11:21
Огромное спасибо тебе камрад! Выручил, осталось только на рабочей машинке проверить работу скрипта)

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

три строчки.

Iska
13-04-2015, 21:22
рар по-быстрому переместит файлы »
WinRAR надо ещё купить ;).

Опиум
13-04-2015, 23:03
Iska, хорошо) используем robocopy /MINAGE:7 /MOV




© OSzone.net 2001-2012