Les réponses données ne supprimeront que les fichiers (ce qui, il faut bien l'admettre, est ce qui est dans le titre de cet article), mais voici un code qui supprimera d'abord tous les fichiers de plus de 15 jours, puis supprimera récursivement tous les répertoires vides qui pourraient avoir été laissés derrière. Mon code utilise également la fonction -Force
pour supprimer également les fichiers cachés et en lecture seule. De plus, j'ai choisi de ne pas utiliser d'alias car le PO est novice en PowerShell et peut ne pas comprendre ce qu'est un alias. gci
, ?
, %
etc.
$limit = (Get-Date).AddDays(-15)
$path = "C:\Some\Path"
# Delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force
# Delete any empty directories left behind after deleting the old files.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
Et bien sûr, si vous voulez voir quels fichiers/dossiers seront supprimés avant de les supprimer réellement, vous pouvez simplement ajouter l'option -WhatIf
sur le Remove-Item
à la fin des deux lignes.
Si vous voulez seulement supprimer les fichiers qui n'ont pas été mis à jour depuis 15 jours, par opposition à ceux qui ont été créés il y a 15 jours, alors vous pouvez utiliser $_.LastWriteTime
au lieu de $_.CreationTime
.
Le code présenté ici est compatible avec PowerShell v2.0, mais je présente également ce code et le code PowerShell v3.0, plus rapide, en tant que fonctions pratiques réutilisables sur mon blog .
11 votes
La plupart des réponses utilisent CreationTime, mais comme cette valeur est réinitialisée lorsqu'un fichier est copié, il se peut que vous n'obteniez pas les résultats escomptés. LastWriteTime est ce qui correspond à la "Date Modified" dans l'Explorateur Windows.