DOS batch file or script that can delete files in a subfolder by date

Posted on 2007-12-06
Last Modified: 2010-05-18
Have weekly image backups of each of our machines to a network drive with their respected machine names.  

Network Server
   Machine1 (folder)

Next month it would start Week5.img, the newest image.

Would like to have Week1.img automatically deleted so there are only four images per machine folder instead of accumulating every week and taking up network server space.

Once I have the logic for one machine I can then add the other machines that need to have their folders maintained.  Then can schedule that in Windows Scheduler.

Question by:JLTollefson
LVL 20

Expert Comment

ID: 20425226
Try this attached batch file.  Just make sure this is run in the correct directory or set the directory in the code.

It will delete the oldest file with a .img extension
@echo off

for /f %%f in ('dir *.img /a-d /o-d /b') do (set myfile=%%f)

del %myfile%

Open in new window

LVL 33

Expert Comment

ID: 20425349
ltlbearand3's suggestion will work well, but I suggest using  /od  instead of  /o-d  in the for-loop so that the oldest file will get deleted instead of the newest.  (points to ltbearand3)
LVL 20

Expert Comment

ID: 20427022
Thanks for double checking my work.  However, I think you want /o-d since it will loop through all files and delete the last one in the list.  Therefore, you want the list newest first.

To test the batch file you can run the attached code and it will just display the file that would be deleted instead of deleting it.

@echo off

for /f %%f in ('dir *.img /a-d /o-d /b') do (set myfile=%%f)

Echo %myfile%


Open in new window

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline


Author Comment

ID: 20429970
Simple and effective!

One more question

Have the folder structure of...

       server1 (subfolder of images)
       server2 (subfolder of images)
       server3 (subfolder of images)
       server4 (subfolder of images)

In each of the server directories are the .img files

With the batch file can I simply state to go to each of these directories and perform the

@echo off
for /f %%f in ('dir *.img /a-d /o-d /b') do (set myfile=%%f)
del %myfile%
LVL 20

Accepted Solution

ltlbearand3 earned 500 total points
ID: 20430452
Try this.  It will parse through all folders in d:\images and delete the oldest file in each main subfolder
@echo off

Set CurDir = "D:\Images"

cd %CurDir%

for /f %%f in ('dir /ad /b') do (Call :DelOld %%f)



Set list=%1

cd %CurDir%\%list%

for /f %%f in ('dir *.img /a-d /o-d /b') do (set myfile=%%f)

del %myfile%

Open in new window


Author Closing Comment

ID: 31413306
Thanks again for the very quick, easy to understand, and simple solution for this issue.
LVL 17

Expert Comment

by:Shanmuga Sundaram
ID: 20484265
If you never mind in using vbs then see the code below. I have used to just display the name and have commented the delete line. So please first ensure that it works fine and then if you are sure then remove the commented line to delete the file. Be precautious.
Option Explicit

On Error Resume Next

    Dim oFSO

    Dim sDirectoryPath

    Dim oFolder

    Dim oFileCollection

    Dim ofoldercollection

    Dim oFile

    Dim iDaysOld

    Set oFSO = CreateObject("Scripting.FileSystemObject")

    set ofolder = ofso.getfolder("C:\your path")

    Set ofoldercollection = oFolder.subfolders

    For Each oFile In oFileCollection

        if ucase(right(oFile.Name,3)) = "IMG" then msgbox 

'oFile.Delete (True)    


    Set oFSO = Nothing

    Set oFolder = Nothing

    Set oFileCollection = Nothing

    Set oFile = Nothing

Open in new window


Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

Displaying an arrayList in a listView using the default adapter is rarely the best solution. To get full control of your display data, and to be able to refresh it after editing, requires the use of a custom adapter.
Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
An introduction to basic programming syntax in Java by creating a simple program. Viewers can follow the tutorial as they create their first class in Java. Definitions and explanations about each element are given to help prepare viewers for future …
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now