martes, 3 de agosto de 2010

Borrado de archivos por fecha

En muchas ocasiones nos es necesario ejecutar (por ejemplo vía tareas programadas de Windows según una planificación) la eliminación masiva de archivos o directorios de una ruta determinada (archivos temporales, logs de aplicaciones).

Para ello, podemos utilizar los siguientes scripts o batch de línea de comandos de CMD:

Primera opción, un script en VBS en el que indicamos en la constante "DIAS", el número de días que queremos conservar en base a la fecha de los ficheros, y en la constante "DIRECTORIO, la ruta sobre la que efectuar el borrado:

Option Explicit

Dim objNetwork
Const DIAS = 90
Const DIRECTORIO = "C:\WINDOWS\system32\LogFiles\W3SVC1012394340"

Call s_BorrarFicheros(DIRECTORIO)

Sub s_BorrarFicheros(str_Ruta)


Dim OBJETO, PROPIEDAD, ARCHIVO, CARPETA



Set OBJETO = WScript.CreateObject("Scripting.FileSystemObject")
Set PROPIEDAD = OBJETO.GetFolder(str_Ruta)

For Each ARCHIVO in PROPIEDAD.Files

If DateDiff ("d", ARCHIVO.DateLastModified, Now) > DIAS Then

ARCHIVO.Delete (True)

End If

Next

For Each CARPETA In PROPIEDAD.SubFolders

Call s_BorrarFicheros(CARPETA.Path)

Next

Set CARPETA = Nothing
Set ARCHIVO = Nothing
Set PROPIEDAD = Nothing
Set OBJETO = Nothing

End Sub


Otra opción, el comando forfiles, al que psamos la ruta en el parámetro -p y el número de días a conservas con el parámetro -d:
forfiles -s -p "C:\TEMP" -c "cmd /c echo del /Q /F @PATH & del /Q /F @PATH & RD /Q /S @PATH" -d -3


Y otra más, un "bat" para eliminar subdirectorios y su contenido a partir de la ruta definida en cursiva:

@echo off
pushd "C:\TEMP"
del /q *.*
for /f "Tokens=*" %%G in ('dir /B') do rd /s /q "%%G"
popd
pushd

1 comentario:

  1. Excelente información y aporte mi estimado amigo, muchísimo gracias.

    ResponderEliminar