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
Example structure
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.
Like E:\no1 and E:\no2 from my example.
-p E:"instead of-p E:\. – Rik Nov 08 '13 at 12:12