Автор: ASGuard
Дата сообщения: 11.03.2009 12:35
Навоял батничек оределения свободного места на диске на ресурсе
Подскажите, как организовать удаление папок.?
При нехватке свободного места должен удалять папку самых ранних архивов
Но не более 3x папок за раз (защита на момент написания)
Потом буду думать чтобы ежедневные хранились пол года а месячные год.
Папки имеют формат типа \2008-09 и \2008-09\Manth
Внутри файлы plan_Day_2009.01.17.rar и plan_Manth_2009.02.02.part4.rar соответственно
раскидываются из общего каталога батничком приведённым ниже
затык на :SetDir и на :ClrDir
[more]
@Echo Off
SetLocal EnableDelayedExpansion
Set IDS="папок"
Set FDir="\\192.168.2.222\backup Проектов\plan_"
rem 1ГБ=1 077 921 832
Set LimSize=24258436643
Title AskDir
:AskDir
Dir %FDir% /A:D /O:D > dir.txt
ping -n 2 -w 1000 127.0.0.1 > nul
For /F "usebackq tokens=1-4 skip=5" %%i in (dir.txt) Do @(IF /i "%%j"==%IDS% (Call :AskSize "%%k" %%l))
If /I "%NDir%" LSS "3" (
If /I "%EraseRun%" GTR "0" (
Set /A NDir=%NDir%+1
Set /A CrD="0"
Call :SetDir
Goto :AskDir
)) ELSE (
Echo:
Echo: Попыток стирания каталогов %NDir%. Или всё стёрли или скоро всё сотрём.
ping -n 20 -w 1000 127.0.0.1 > nul
GoTo :EOF)
Echo:
Echo: Всё в "Ажуре"
Echo:
ping -n 10 -w 1000 127.0.0.1 > nul
GoTo :EOF
:AskSize
Set Size=%~1
For /F "usebackq tokens=1-5" %%i in ('%Size%') Do @(Set Size=%%i%%j%%k%%l%%m)
Echo:
Echo:Обьём свободного места %FDir%
If /I "%Size:~-15,-3%" GTR "0" (Set K=К
If /I "%Size:~-15,-6%" GTR "0" (Set M=М
If /I "%Size:~-15,-9%" GTR "0" (Set G=Г
If /I "%Size:~-15,-12%" GTR "0" (Set T=Т ))))
Echo: %Size:~-15,-12%%T%%Size:~-12,-9%%G%%Size:~-9,-6%%M%%Size:~-6,-3%%K%%Size:~-3%%2
Echo:
Call :Limits
GoTo :EOF
:Limits
If /I "%Size:~-15,-6%" LSS "%LimSize:~-15,-6%" (
Set /A RSize="%LimSize:~-15,-6%"-"%Size:~-15,-6%"
Set EraseRun=1
Echo:Обьём свободного места %FDir% меньше требуемого.
Set Ech=Нужно почистить.
) ELSE (
Set /A RSize="%Size:~-15,-6%"-"%LimSize:~-15,-6%"
Set EraseRun=0
Echo:Обьём свободного места %FDir% больше требуемого.
Set Ech=Резерв.
)
If /I "%RSize%" GTR "0" (Set M=М
If /I "%RSize:~-9,-3%" GTR "0" (Set G=Г
If /I "%RSize:~-9,-6%" GTR "0" (Set T=Т )))
Echo: %Ech% %RSize:~-9,-6%%T%%RSize:~-6,-3%%G%%RSize:~-3%%M%байт
GoTo :EOF
:SetDir
SetLocal EnableExtensions
Echo:
Echo: Уничтожаем каталог самого раннего времени создания
Set dirflag=/o:d /b /t:c /a:d
SetLocal
pushd %FDir%
For /F "tokens=*" %%i in ('dir %dirflag% %FDir%') Do @(Call :ClrDir "%%i")
GoTo :EOF
:ClrDir
If /I "!CrD!" == "0" (
Set /A CrD="1"
Del %1
Echo:
pause
)
GoTo :EOF
[/more]
[more]
@Echo Off
Set FDir=\\192.168.2.222\backup Проектов\plan_
Title SortArch
Call :File_Find
GoTo :EOF
:File_Find
Set f_Ext=rar
For %%a In (%FDir%\*.%f_Ext%) Do Call :File_Ex %%~nxa %%~ta
If Defined FileExist Echo Exist
Echo: All Move !!!
ping -n 5 -w 1000 127.0.0.1 > nul
GoTo :EOF
:File_Ex
Set FileExist=Yes
Set f_Count=1
Call :Rena %1 %2 %3
GoTo :EOF
:Rena
Set /a f_Count=%f_Count%+1
Set f_Name=%1
Set f_Date=%2
Set f_Day=%f_Date:~0,2%
Set f_Month=%f_Date:~3,2%
Set f_Year=%f_Date:~6,4%
Set f_NewDir=%f_Year%-%f_Month%
SetLocal EnableDelayedExpansion
Set sDS=Manth
Set iDS=5
Set bM=0
For /l %%a In (0,1,50) Do (
Set sDI=!f_Name:~%%a,%iDS%!
If !sDI!==%sDS% (Set bM=1)
)
If %bM%==0 ( MD %FDir%\%f_NewDir%
Move %FDir%\%f_Name% %FDir%\%f_NewDir%
) Else ( MD %FDir%\%f_NewDir%
MD %FDir%\%f_NewDir%\%sDS%
Move %FDir%\%f_Name% %FDir%\%f_NewDir%\%sDS%
)
GoTo :EOF
[/more]