|
Answer» 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 ? 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------------- 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 ?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
|