highhill2011
asked on
deleting files over a week old with batch files
My company is running trendnet securview ip camera's for our security system that saves large amounts of files to C:\videos directory every couple of minutes. Naturally these directories grow very quickly.
I'm looking for a simple way of having those directories automatically remove video's older than a week every night so as to avoid running out of disk space for any of the camera's.
My knowledge of ms-dos and batch scripting is fairly limited so i want to accomplish this in as simple a manner as possible. This script needs to run on Vista, and windows server 2008 r2.
I'm looking for a simple way of having those directories automatically remove video's older than a week every night so as to avoid running out of disk space for any of the camera's.
My knowledge of ms-dos and batch scripting is fairly limited so i want to accomplish this in as simple a manner as possible. This script needs to run on Vista, and windows server 2008 r2.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
my boss would prefer it if we didn't use any third party utilities.
I did try that vbscript, but it didn't delete anything, when i ran it the prompt said it was deleting anything older than 1 month old, did i mess up the spacing or variables somewhere along the line?
I did try that vbscript, but it didn't delete anything, when i ran it the prompt said it was deleting anything older than 1 month old, did i mess up the spacing or variables somewhere along the line?
If you go to a DOS command prompt, and run the following command, what exactly does it display:
ECHO %DATE%
~bp
ECHO %DATE%
~bp
ASKER
fri 03/25/2011
Did you amend it to be a week as suggested, is there anything over a month old there anyway? If this is a new test directory you have created with test files then they will all have been created now so will not trigger it. You could amend to use modified date if you prefer instead, as below
' Call initial folder to delete and it will work down subdirs
' By running recursively through subdirs after doing files
' in each dir. Second parameter is date of last files to leave
' Anything older will go.
' Stephen Knight July 2009
Dim deletionDate
Dim fso
Dim oFile
Dim oFolder
Set fso = CreateObject("Scripting.Fi leSystemOb ject")
DeleteFiles "c:\videos",DateAdd("d", -7, Date)
msgbox "Deleting older than " & DateAdd("d", -1, Date)
Set oFolder = Nothing
Set oFile = Nothing
Set fso = Nothing
Function DeleteFiles(foldername,cut offdate)
Set oFolder = fso.GetFolder(foldername)
For Each oFile in oFolder.Files
If ofile.DateLastModified < cutoffDate Then
wscript.echo oFile.Name
fso.DeleteFile oFile, True
End If
Next
For Each subFolder In oFolder.SubFolders
DeleteFiles subFolder.Path, cutoffdate
If (SubFolder.Files.Count = 0) and (SubFolder.SubFolders.Coun t=0) And (SubFolder.DateCreated < cutoffdate) Then
wscript.echo "deleting " & subfolder.name & " created on " & subfolder.DateCreated
call SubFolder.Delete()
End If
Next
End Function
' Call initial folder to delete and it will work down subdirs
' By running recursively through subdirs after doing files
' in each dir. Second parameter is date of last files to leave
' Anything older will go.
' Stephen Knight July 2009
Dim deletionDate
Dim fso
Dim oFile
Dim oFolder
Set fso = CreateObject("Scripting.Fi
DeleteFiles "c:\videos",DateAdd("d", -7, Date)
msgbox "Deleting older than " & DateAdd("d", -1, Date)
Set oFolder = Nothing
Set oFile = Nothing
Set fso = Nothing
Function DeleteFiles(foldername,cut
Set oFolder = fso.GetFolder(foldername)
For Each oFile in oFolder.Files
If ofile.DateLastModified < cutoffDate Then
wscript.echo oFile.Name
fso.DeleteFile oFile, True
End If
Next
For Each subFolder In oFolder.SubFolders
DeleteFiles subFolder.Path, cutoffdate
If (SubFolder.Files.Count = 0) and (SubFolder.SubFolders.Coun
wscript.echo "deleting " & subfolder.name & " created on " & subfolder.DateCreated
call SubFolder.Delete()
End If
Next
End Function
Okay, I'm sure Steve will get the VBS approach to work for you, but here is a pure BAT solution if you want to go that way. It's quite a bit more code than a VBS solution since BAT doesn't have the robust date manipulation commands in it, but it's not too bad.
As the script is provided, it will only display a line for each file that would be deleted to the console right now. This will allow you to test and make sure it does what you want it to. If it does then remove or REM out the ECHO line that displays the file name and age, and then remove the REM in front of the DEL line so that it will actually delete the files.
As the script is provided, it will only display a line for each file that would be deleted to the console right now. This will allow you to test and make sure it does what you want it to. If it does then remove or REM out the ECHO line that displays the file name and age, and then remove the REM in front of the DEL line so that it will actually delete the files.
@echo off
setlocal EnableDelayedExpansion
REM Define base for folders, and days to keep old folders
Set BaseDir=c:\videos
set DaysToKeep=7
REM Get todays date (MM/DD/YYYY), convert to julian for age checks
call :jDate jToday %DATE:~-10%
REM Process all Files in the directory, delete if old
for %%A in ("%BaseDir%\*.*") do (
call :jDate jFile %%~tA
set /A FileAge = !jToday! - !jFile!
if !FileAge! GTR %DaysToKeep% (
ECHO File:[%%A] is [!FileAge!] days old and would be deleted
REM del "%%~A"
)
)
REM Done
exit /b
REM Subroutine to calculate julian date
:jDate return-variable date-string(MM/DD/YYYY)
set DateStr=%~2
set yy=%DateStr:~6,4%
set /A mm=1%DateStr:~0,2%-100
set /A dd=1%DateStr:~3,2%-100
set /a "yy=10000%yy% %%10000,mm=100%mm% %% 100,dd=100%dd% %% 100"
set /a %~1=dd-32075+1461*(yy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yy+4900+(mm-14)/12)/100)/4
exit /b
~bp
ASKER
ah, i see now. i missed changing the "m" to "d" that makes sense now.
ASKER
this accomplished everything that i needed it to.
Good stuff, glad it helped. Steve
http://home.mnet-online.de/horst.muc/win/delage.htm
http://home.mnet-online.de/horst.muc/wbat32.htm
~bp