Sep 08 2021

DOS / Powershell: Eliminar Archivos Anteriores a

Published by at 21:52 under Windows

Los administradores de sistemas se enfrentan cada vez más a directorios en continuo crecimiento, que contienen informes generados por scripts o tareas programadas. Lo mismo ocurre con los directorios temporales y nadie se molesta en limpiarlos. ¿Pero no es ése también nuestro trabajo?
Aquí hay 2 scripts simples que se pueden ejecutar regularmente para eliminar archivos de más de 30 días, por ejemplo, en DOS o Powershell.


Borrar archivos en DOS


El primero en DOS es más limitado ya que ForFiles solo puede procesar la última fecha de modificación.

Echo @off
Cls

Set Folder=C:\Informes

if exists %Folder% (
  rem *******************************************
  rem Elimina los atributos del sistema y los archivos de caché
  rem que no son procesados ​​por el comando del
  Forfiles /S /P "%Folder%" /M * /D -30 /C "cmd /c attrib -s -h @path"
  rem Eliminar archivos de más de 30 días
  Forfiles /S /P "%Folder%" /M * /D -30 /C "cmd /c del /F /Q @path"

  rem Eliminación de directorios vacíos
  for /f "delims=" %%d in ('dir /S /B /AD %SrcDir% ^| sort /R') do rmdir "%%d"
)


Eliminar archivos en Powershell


Powershell le permite trabajar con los 3 parámetros LastAccessTime, LastWriteTime y CreationTime.

$limit = (Get-Date).AddDays(-30)
$path = "Q:\Informes"

if (Test-Path $path) {
  # Borrar archivos anteriores a $limit.
  Get-ChildItem -Path $path -Recurse | 
  Where-Object { !$_.PSIsContainer -and $_.lastAccessTime -lt $limit } |
  Remove-Item -Force

  # Elimina las carpetas que quedan vacías después de eliminar archivos antiguos.
  Get-ChildItem -Path $path -Recurse |
  Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse |
  Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
}


Para ejecutar el script, verifique las restricciones de PowerShell con

Get-ExecutionPolicy


Si el estado restringido está activo, ejecute

Set-ExecutionPolicy RemoteSigned


Y ejecute este comando en una tarea programada para eliminar archivos antiguos en Powershell con regularidad:

powershell C:\Scripts\ClearFolder.ps1

No responses yet

Comments RSS

Leave a Reply