powershell powershell-v2.0 powershell-v3.0

Eliminar archivos de más de 15 días con PowerShell



powershell-v2.0 powershell-v3.0 (9)

Básicamente, itera sobre los archivos en la ruta determinada, resta el tiempo de CreationTime de cada archivo encontrado a partir de la hora actual y compara con la propiedad Days del resultado. El -WhatIf le indicará lo que sucederá sin eliminar los archivos (qué archivos se eliminarán), elimine el interruptor para eliminar realmente los archivos:

$old = 15 $now = Get-Date Get-ChildItem $path -Recurse | Where-Object {-not $_.PSIsContainer -and $now.Subtract($_.CreationTime).Days -gt $old } | Remove-Item -WhatIf

Me gustaría eliminar solo los archivos que se crearon hace más de 15 días en una carpeta en particular. ¿Cómo podría hacer esto usando PowerShell?


La secuencia de comandos de Esperento57 no funciona en las versiones anteriores de PowerShell. Este ejemplo hace:

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


Otra alternativa (15. se escribe a [intervalo de tiempo] automáticamente):

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


Otra forma es restar 15 días de la fecha actual y comparar CreationTime con ese valor:

$root = ''C:/root/folder'' $limit = (Get-Date).AddDays(-15) Get-ChildItem $root -Recurse | ? { -not $_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item


Prueba esto:

dir C:/PURGE -recurse | where { ((get-date)-$_.creationTime).days -gt 15 } | remove-item -force


simplemente, (PowerShell V5)

Get-ChildItem "C:/temp" -Recurse -File | Where CreationTime -lt (Get-Date).AddDays(-15) | Remove-Item -Force


Las respuestas dadas solo eliminarán los archivos (lo que es cierto es lo que está en el título de esta publicación), pero aquí hay un código que primero borrará todos los archivos anteriores a 15 días y luego eliminará recursivamente los directorios vacíos que puedan haber quedado. detrás. Mi código también usa la opción -Force para eliminar también los -Force ocultos y de solo lectura. Además, elegí no usar alias ya que el OP es nuevo en PowerShell y es posible que no comprenda qué gci , % , etc. son.

$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

Y, por supuesto, si desea ver qué archivos / carpetas se eliminarán antes de eliminarlos realmente, puede simplemente agregar el parámetro -WhatIf a la llamada al cmdlet Remove-Item al final de ambas líneas.

El código que se muestra aquí es compatible con PowerShell v2.0, pero también muestro este código y el código más rápido de PowerShell v3.0 como funciones útiles reutilizables en mi blog .


#----- 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" } }


$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

Esto eliminará las carpetas viejas y su contenido.