Sep 08 2021
DOS / Powershell: Eliminar Archivos Anteriores a
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