Welcome guest. Before posting on our computer help forum, you must register. Click here it's easy and free.

Author Topic: Delete files - older than 7 days  (Read 12484 times)

0 Members and 1 Guest are viewing this topic.

kalmazz

    Topic Starter


    Rookie

    Thanked: 1
    Delete files - older than 7 days
    « 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 ?

    TheHoFL



      Intermediate

      Thanked: 5
      Re: Delete files - older than 7 days
      « Reply #1 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-------------
      All your dreams can come true if you have the courage to pursue them.  - Walt Disney

      kalmazz

        Topic Starter


        Rookie

        Thanked: 1
        Re: Delete files - older than 7 days
        « Reply #2 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 ?

        gh0std0g74



          Apprentice

          Thanked: 37
          Re: Delete files - older than 7 days
          « Reply #3 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