Sep 06 2015
DOS / Powershell: Supprimer les Fichiers plus Vieux que
Les admins système sont de plus en plus confrontés à des répertoires qui grossissent continuellement, contenant des rapports générés par des scripts ou des tâches planifiées. C’est la même chose pour les répertoires temporaires et personne ne s’attarde à y faire du ménage. Mais n’est-ce pas aussi notre boulot?
Voici 2 scripts simples pouvant être exécutés régulièrement pour supprimer les fichiers plus vieux que disons 30 jours par exemple en DOS ou Powershell.
Effacer les Fichiers sous DOS
Le premier en DOS est plus limité vu que ForFiles ne peut traiter que la date de dernière modification.
Echo @off
Cls
Set Folder=C:\Reports
if exists %Folder% (
rem *******************************************
rem Supprime les attributs système et les fichiers cache
rem qui ne sont pas traités par la commande del
Forfiles /S /P "%Folder%" /M * /D -30 /C "cmd /c attrib -s -h @path"
rem Suppression des fichiers plus vieux que 30 jours
Forfiles /S /P "%Folder%" /M * /D -30 /C "cmd /c del /F /Q @path"
rem Suppression des répertoires vides
for /f "delims=" %%d in ('dir /S /B /AD %SrcDir% ^| sort /R') do rmdir "%%d"
)
Supprimer les Fichiers en Powershell
Powershell permet de travailler avec les 3 parametres LastAccessTime, LastWriteTime and CreationTime.
$limit = (Get-Date).AddDays(-30)
$path = "C:\Temp"
if (Test-Path $path) {
# Efface les fichiers plus vieux que $limit jours.
Get-ChildItem -Path $path -Recurse |
Where-Object { !$_.PSIsContainer -and $_.lastAccessTime -lt $limit } |
Remove-Item -Force
# Supprime les dossiers laissés vides après la suppression des vieux fichiers.
Get-ChildItem -Path $path -Recurse |
Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse |
Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
}
Pour exécuter le script, vérifier les restrictions powershell avec
Get-ExecutionPolicy
Si l’état restreint est actif, exécuter
Set-ExecutionPolicy RemoteSigned
Et lancer cette commande dans une tâche planifiée pour supprimer les vieux fichiers en Powershell de façon régulière:
powershell C:\Scripts\ClearFolder.ps1