J'ai une tâche / un script planifié en cours d'exécution qui prend un instantané d'un fichier toutes les 3 heures, mais le fichier s'agrandit et l'espace disque est limité. Je souhaite donc effectuer un nettoyage toutes les semaines.
Pour l'instant, je le fais manuellement, mais j'espère que cette tâche pourra être automatisée.
Ce que je veux exactement, j'ai un répertoire qui contient ceci:
B:\>dir
Volume in drive B is BACKUP
Volume Serial Number is ****-****
Directory of B:\
2015-03-04 13:04 <DIR> MEMORYCRASHDUMPS
2015-03-02 23:59 20 484 150 [20150302235959.082]-Logs.rar
2015-03-03 00:00 <DIR> Logs
2015-03-01 17:59 67 365 888 [20150301180000.085]-users.sqlite3
2015-03-01 22:50 67 480 576 [20150301230000.368]-users.sqlite3
2015-03-02 00:32 67 480 576 [20150302030000.378]-users.sqlite3
2015-03-02 06:22 67 503 104 [20150302080000.352]-users.sqlite3
2015-03-02 12:59 67 605 504 [20150302130000.084]-users.sqlite3
2015-03-02 17:59 67 740 672 [20150302180000.090]-users.sqlite3
2015-03-02 22:59 67 921 920 [20150302230000.418]-users.sqlite3
2015-03-03 02:58 67 960 832 [20150303030000.088]-users.sqlite3
2015-03-03 07:53 67 966 976 [20150303080000.456]-users.sqlite3
2015-03-03 12:59 68 013 056 [20150303130000.082]-users.sqlite3
2015-03-03 17:59 68 153 344 [20150303180000.081]-users.sqlite3
2015-03-03 22:54 68 339 712 [20150303230000.352]-users.sqlite3
2015-03-04 01:40 68 350 976 [20150304030000.090]-users.sqlite3
2015-03-04 07:51 68 367 360 [20150304080000.358]-users.sqlite3
2015-03-04 12:53 68 452 352 [20150304130000.085]-users.sqlite3
2015-03-04 17:58 68 718 592 [20150304180000.083]-users.sqlite3
Je veux tout supprimer ./*-users.sqlite3
, sauf le plus récent (Bonus: Sauf les N les plus récents).
Existe-t-il une commande Windows pratique intégrée pour cela?
J'ai déjà vérifié quelques questions, bien qu'elles ne couvrent que la suppression de fichiers par date / âge ou modèles, elles ne fournissent pas un moyen d'exclure l'élément le plus récent (uniquement un nom de fichier donné).
Réponses:
Simple - traite une liste de répertoires triée par date décroissante via FOR / F et ignore les N premières lignes. Vos noms de fichier contiennent déjà un horodatage qui trie correctement par ordre chronologique afin que vous puissiez trier par nom.
Ce qui suit préservera les 3 fichiers les plus récents. Modifiez simplement la valeur SKIP si nécessaire.
Vous pouvez mettre ce qui précède dans un script batch et paramétrer la valeur de saut.
purgeLog.bat
Pour conserver les 2 journaux les plus récents, vous utiliseriez:
la source