Computer Hope

Microsoft => Microsoft DOS => Topic started by: kalmazz on May 30, 2009, 02:36:25 AM

Title: Delete files - older than 7 days
Post by: kalmazz on May 30, 2009, 02:36:25 AM
I have a folder where every day backup files are copied from a system.
I need to create a batchfile and put in the windows schedule that deletes the file older than seven days.
How do I do it ?
Title: Re: Delete files - older than 7 days
Post by: TheHoFL on May 30, 2009, 02:41:26 AM
I found this online. I hope it helps...

Code: [Select]
:: --------DELOLD.BAT----------
@echo off
SET OLDERTHAN=%1
IF NOT DEFINED OLDERTHAN GOTO SYNTAX

for /f "tokens=2" %%i in ('date /t') do set thedate=%%i

set mm=%thedate:~0,2%
set dd=%thedate:~3,2%
set yyyy=%thedate:~6,4%

set /A dd=%dd% - %OLDERTHAN%
set /A mm=%mm% + 0

if /I %dd% GTR 0 goto DONE
set /A mm=%mm% - 1
if /I %mm% GTR 0 goto ADJUSTDAY
set /A mm=12
set /A yyyy=%yyyy% - 1

:ADJUSTDAY
if %mm%==1 goto SET31
if %mm%==2 goto LEAPCHK
if %mm%==3 goto SET31
if %mm%==4 goto SET30
if %mm%==5 goto SET31
if %mm%==6 goto SET30
if %mm%==7 goto SET31
if %mm%==8 goto SET31
if %mm%==9 goto SET30
if %mm%==10 goto SET31
if %mm%==11 goto SET30
if %mm%==12 goto SET31

goto ERROR

:SET31
set /A dd=31 + %dd%
goto DONE

:SET30
set /A dd=30 + %dd%
goto DONE

:LEAPCHK
set /A tt=%yyyy% %% 4
if not %tt%==0 goto SET28
set /A tt=%yyyy% %% 100
if not %tt%==0 goto SET29
set /A tt=%yyyy% %% 400
if %tt%==0 goto SET29

:SET28
set /A dd=28 + %dd%
goto DONE

:SET29
set /A dd=29 + %dd%

:DONE
if /i %dd% LSS 10 set dd=0%dd%
if /I %mm% LSS 10 set mm=0%mm%
for %%i in (*.*) do (
set FileName=%%i
call :PROCESSFILE %%~ti
)

set mm=
set yyyy=
set dd=
set thedate=
goto EXIT

:SYNTAX
ECHO.
ECHO USAGE:
ECHO DELOLD X
ECHO   Where X is the number of days previous to Today.
ECHO.
ECHO EX: "DELOLD 5" Deletes files older than 5 days.
GOTO EXIT

:PROCESSFILE
set temp=%1
set fyyyy=20%temp:~6%
set fmm=%temp:~0,2%
set fdd=%temp:~3,2%
if /I %fyyyy% GTR 2069 set fyyyy=19%temp:~6%


:: +*************************************+
:: | This is where the files are deleted |
:: | Change the ECHO command to DEL to   |
:: | delete. ECHO is used for test.      |
:: +*************************************+
if /I %yyyy%/%mm%/%dd% GEQ %fyyyy%/%fmm%/%fdd% (
ECHO %FileName%
)

set temp=
set fyyyy=
set fmm=
set fdd=

:EXIT

:: ----------END-DELOLD.BAT-------------
Title: Re: Delete files - older than 7 days
Post by: kalmazz on May 31, 2009, 07:33:06 AM
Thanks,

This file delete the latest file - today's file . Is because of the date format ?
My date format is mm-dd-yyyy.

This file should delete the files older than 7 days. So there should not be any parameter passing .
Please let me know where to edit the batch file to give a fixed value of 7 ?
Title: Re: Delete files - older than 7 days
Post by: gh0std0g74 on May 31, 2009, 08:09:11 AM
you should at least understand what the batch script is doing before using. Here's a much shorter vbscript. don't have to worry about date settings.
Code: [Select]
Set objFS = CreateObject("Scripting.FileSystemObject")
strFolder = "c:\test"
Set objFolder = objFS.GetFolder(strFolder)
For Each strFile In objFolder.Files
If DateDiff("d",strFile.DateLastModified,Now) > 30 Then
strFileName = strFile.Name
WScript.Echo strFileName
objFS.DeleteFile(strFileName)
End If
Next

on command prompt
Code: [Select]
c:\test> cscript /nologo myscript.vbs

want something even shorter? you can download GNU find (see my sig under findutils)
Code: [Select]
C:\test>find c:\test -type f -mtime +30 -delete