JLTollefson
asked on
DOS batch file or script that can delete files in a subfolder by date
Have weekly image backups of each of our machines to a network drive with their respected machine names.
Network Server
Machine1 (folder)
Week1.img
Week2.img
Week3.img
Week4.img
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.
Thanks
Network Server
Machine1 (folder)
Week1.img
Week2.img
Week3.img
Week4.img
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.
Thanks
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)
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.
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%
Pause
ASKER
Simple and effective!
One more question
Have the folder structure of...
D:\images
server1 (subfolder of images)
server2 (subfolder of images)
server3 (subfolder of images)
server4 (subfolder of images)
etc.
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%
One more question
Have the folder structure of...
D:\images
server1 (subfolder of images)
server2 (subfolder of images)
server3 (subfolder of images)
server4 (subfolder of images)
etc.
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%
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks again for the very quick, easy to understand, and simple solution for this issue.
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.name
'oFile.Delete (True)
Next
Set oFSO = Nothing
Set oFolder = Nothing
Set oFileCollection = Nothing
Set oFile = Nothing
It will delete the oldest file with a .img extension
Open in new window