Edita: Après avoir répondu à @Mbu, je me suis rendu compte que ma première approche, qui consistait à utiliser les chiffres en tête des dossiers comme critères d'exclusion, n'était pas la bonne. J'ai décidé d'utiliser une liste fixe de dossiers à exclure.
Je souhaite supprimer certains fichiers par lots, mais en excluant un ensemble donné de chemins d'accès à vérifier.
Exemple de 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
En oui y non les noms de fichiers démontrent quels fichiers doivent être supprimés
Ce que je veux
Rechercher tous les fichiers dans tous les dossiers et sous-dossiers en commençant par le dossier dans lequel le lot est placé. Si toutes les conditions suivantes sont remplies, le fichier est supprimé.
- L'extension du fichier est .cfg, .dat, .hgr ou .txt
- modifié l'heure date de plus de 365 jours
- Le chemin ne figure pas sur la liste noire
Ce que j'ai essayé
Sur la base de cette question Je l'ai fait :
@echo off
for %%i in (.cfg, .dat, .hdr, .txt) do (
forfiles /s /m *%%i /d -365 /c "cmd /c del @path"
)
pause
Deux des trois problèmes sont résolus, mais comment exclure un ensemble donné de dossiers.
Comme E:\no1
y E:\no2
de mon exemple.