231 votes

Supprimer les fichiers de plus de 15 jours à l'aide de PowerShell

Je voudrais supprimer uniquement les fichiers qui ont été créés il y a plus de 15 jours dans un dossier particulier. Comment pourrais-je faire cela en utilisant PowerShell ?

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.

8voto

KERR Points 358

Le script d'Esperento57 ne fonctionne pas dans les anciennes versions de PowerShell. Cet exemple fonctionne :

Get-ChildItem -Path "C:\temp" -Recurse -force -ErrorAction SilentlyContinue | where {($_.LastwriteTime -lt  (Get-Date).AddDays(-15) ) -and (! $_.PSIsContainer)} | select name| Remove-Item -Verbose -Force -Recurse -ErrorAction SilentlyContinue

6voto

Jeff Blumenthal Points 67

Si vous rencontrez des problèmes avec les exemples ci-dessus sur une boîte Windows 10, essayez de remplacer .CreationTime con .LastwriteTime . Cela a fonctionné pour moi.

dir C:\locationOfFiles -ErrorAction SilentlyContinue | Where { ((Get-Date)-$_.LastWriteTime).days -gt 15 } | Remove-Item -Force

4voto

js2010 Points 823

Une autre alternative (15. est tapé dans [timespan] automatiquement) :

ls -file | where { (get-date) - $_.creationtime -gt 15. } | Remove-Item -Verbose

2voto

Ikruzzz Points 198
#----- Define parameters -----#
#----- Get current date ----#
$Now = Get-Date
$Days = "15" #----- define amount of days ----#
$Targetfolder = "C:\Logs" #----- define folder where files are located ----#
$Extension = "*.log" #----- define extension ----#
$Lastwrite = $Now.AddDays(-$Days)

#----- Get files based on lastwrite filter and specified folder ---#
$Files = Get-Children $Targetfolder -include $Extension -Recurse | where {$_.LastwriteTime -le "$Lastwrite"}

foreach ($File in $Files)
{
    if ($File -ne $Null)
    {
        write-host "Deleting File $File" backgroundcolor "DarkRed"
        Remove-item $File.Fullname | out-null
    }
    else
        write-host "No more files to delete" -forgroundcolor "Green"
    }
}

1voto

Aigar Points 11
$limit = (Get-Date).AddDays(-15)
$path = "C:\Some\Path"

# Delete files older than the $limit.
Get-ChildItem -Path $path -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force -Recurse

Cela supprimera les anciens dossiers et leur contenu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X