Je m'ennuyais un peu et j'ai trouvé ceci, qui contient ma version d'un remplacement d'époque Linux du pauvre, limité à un usage quotidien (pas de rétention de temps) :
7daysclean.cmd
@echo off
setlocal ENABLEDELAYEDEXPANSION
set day=86400
set /a year=day*365
set /a strip=day*7
set dSource=C:\temp
call :epoch %date%
set /a slice=epoch-strip
for /f "delims=" %%f in ('dir /a-d-h-s /b /s %dSource%') do (
call :epoch %%~tf
if !epoch! LEQ %slice% (echo DELETE %%f ^(%%~tf^)) ELSE echo keep %%f ^(%%~tf^)
)
exit /b 0
rem Args[1]: Year-Month-Day
:epoch
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=1,2,3 delims=-" %%d in ('echo %1') do set Years=%%d& set Months=%%e& set Days=%%f
if "!Months:~0,1!"=="0" set Months=!Months:~1,1!
if "!Days:~0,1!"=="0" set Days=!Days:~1,1!
set /a Days=Days*day
set /a _months=0
set i=1&& for %%m in (31 28 31 30 31 30 31 31 30 31 30 31) do if !i! LSS !Months! (set /a _months=!_months! + %%m*day&& set /a i+=1)
set /a Months=!_months!
set /a Years=(Years-1970)*year
set /a Epoch=Years+Months+Days
endlocal& set Epoch=%Epoch%
exit /b 0
USAGE
set /a strip=day*7
: Changer 7 pour le nombre de jours à conserver.
set dSource=C:\temp
: Il s'agit du répertoire de départ pour la recherche de fichiers.
NOTES
C'est un code non-destructif, il affichera ce qui se serait passé.
Changement :
if !epoch! LEQ %slice% (echo DELETE %%f ^(%%~tf^)) ELSE echo keep %%f ^(%%~tf^)
à quelque chose comme :
if !epoch! LEQ %slice% del /f %%f
pour que les fichiers soient réellement supprimés
Février L'année bissextile : est codée en dur à 28 jours. Les années bissextiles sont un enfer à ajouter, vraiment. Si quelqu'un a une idée qui n'ajouterait pas 10 lignes de code, allez-y et postez-la pour que je l'ajoute à mon code.
époque : Je n'ai pas pris en compte le temps, comme le besoin est de supprimer les fichiers plus anciens qu'une certaine date, prendre les heures/minutes aurait supprimé les fichiers d'un jour qui était destiné à être conservé.
LIMITATION
époque prend pour acquis que votre format de date courte est AAAA-MM-JJ. Il faudrait l'adapter pour d'autres paramètres ou une évaluation en cours d'exécution (lire sShortTime, configuration liée à l'utilisateur, configurer l'ordre correct des champs dans un filtre et utiliser le filtre pour extraire les données correctes de l'argument).
Ai-je mentionné que je déteste l'auto-formatage de cet éditeur ? Il supprime les lignes vides et le copier-coller est un enfer.
J'espère que cela vous aidera.
8 votes
Jeff Atwood a répondu à cette question sur Serverfault et je pense qu'elle devrait être documentée ici. serverfault.com/questions/49614/suppression de fichiers de moins de x jours
0 votes
Une nouvelle méthode basée sur un fichier .BAT qui utilise uniquement les commandes internes de CMD.EXE a été publiée ici : stackoverflow.com/questions/9746778/
1 votes
gehrcke.de/timegaps a été conçu à cet effet. Il permet même un schéma de suppression plus sophistiqué : en plus de conserver les fichiers des 7 derniers jours, il permet aussi, par exemple, de conserver un fichier pour chacune des 8 dernières semaines, 12, mois, 2 ans.