Edit: After @Mbu answer I realized that my first approach with leading numbers in folders as criteria to exclude isn't the right way. I decided to use a fixed list of folders to exclude.
I want to delete certain files via batch , but exclude a given set of paths to be checked
E:. |───MyBatchFile.cmd | ├───yes │ │ no.doc | file has wrong extension │ │ yes.cfg │ │ yes.dat │ │ yes.hgr │ │ │ └───yes │ yes.cfg │ yes.dat │ yes.hgr │ ├───yes │ yes.cfg │ no.dat | file is too new, modified within a year │ no.hgr | file is too new, modified within a year │ |───no1 | folder is on blacklist | importantstuff │ └───no2 | folder is on blacklist importantstuff
The yes and no file names demonstrate which files should be deleted
What I want
Search all files in all folders and subfolders starting at the folder where the batch is placed. If all following conditions are true, delete the file
- file extension is .cfg, .dat, .hgr or .txt
- modified time is more than 365 days old
- Path is not on blacklist
What I have tried
Based on this question, I have:
@echo off for %%i in (.cfg, .dat, .hdr, .txt) do ( forfiles /s /m *%%i /d -365 /c "cmd /c del @path" ) pause
Two of three issues are solved, but how do I exclude a given set of folders.
E:\no2 from my example.