Delete old files based on date ?

I have files that I need to get rid of ...
But I would like to delete the files before a certain date (created).
can I specify a range ?
let's say delete files between 10Jan and 14Jan
thanks.
ammounpierreAsked:
Who is Participating?
 
t0t0Commented:
Place the following batch file in the folder containing the files you want to delete.
Then, call it passing two dates as parameters ie,

   DELRANGE 26/01/2008 28/02/2009

This will delete all files between, and including 26 Jan 2007 and 28 Feb 2009


@echo off
setlocal enabledelayedexpansion
set d1=%1
set d2=%2
set d1=!d1:~6,4!!d1:~3,2!!d1:~0,2!
set d2=!d2:~6,4!!d2:~3,2!!d2:~0,2!

for %%a in (*.*) do (
   set fn=%%a
   set fd=%%~ta
   set fd=!fd:~6,4!!fd:~3,2!!fd:~0,2!
   if !fd! GEQ !d1! (
      if !fd! LEQ !d2! (
         del !fn!
      )
   )
)
0
 
LearnctxEngineerCommented:
Definitely want to delete files created before a certain date, or modified before a certain date? For example, a text file created on the 01/01/2009 could have been modified on 02/02/2009, but still created at the older date. If you want to get rid of files which aren't being modified for a certain amount of time (using batch), try using the ForFiles command (http://www.ss64.com/nt/forfiles.html). I'm not sure if there's any easy way to delete files created before a certain date in a batch file (VBS or Powershell could do this easily).

Might also be worth looking at http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/MS_DOS/Q_20947290.html.
SET DIRECTORY=c:\temp
:: To test use ForFiles /p %DIRECTORY% /S /M *.* -d -16/09/2008 -c "cmd /c @echo @path"
ForFiles /p %DIRECTORY% /S /M *.* -d -16/09/2008 -c "cmd /c @del /q @path"

Open in new window

0
 
t0t0Commented:
By the way, you can also call the batch file from within another batch file. But remember to pass it both dates as before ie,

   :
   CALL delrange 26/01/2008 28/02/2009
   :

NOTE: I've condensed the last line.... otherwise it's the same as the code above.

@echo off
setlocal enabledelayedexpansion
set d1=%1
set d2=%2
set d1=!d1:~6,4!!d1:~3,2!!d1:~0,2!
set d2=!d2:~6,4!!d2:~3,2!!d2:~0,2!

for %%a in (*.*) do (
   set fn=%%a
   set fd=%%~ta
   set fd=!fd:~6,4!!fd:~3,2!!fd:~0,2!
   if !fd! GEQ !d1! if !fd! LEQ !d2! del !fn!
)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.