¿Cómo elimino archivos antiguos de un directorio manteniendo los más recientes en Windows [duplicado]

StackOverflow https://stackoverflow.com/questions/50902

  •  09-06-2019
  •  | 
  •  

Pregunta

Posible duplicado:
Archivo por lotes para eliminar archivos con más de N días

Quiero ejecutar una tarea programada de Windows que elimine todos los archivos de un directorio que tengan más de 2 semanas.

La razón es que estos son registros de IIS y Tomcat que llenan mi servidor, pero quiero conservar los registros más recientes en caso de que necesite investigar un problema.

¿Alguien sabe una manera fácil de hacer esto?

Salud

Nigeria

¿Fue útil?

Solución

sintaxis exacta: FORFILES /p d:\new /d -30 /m * /c "cmd /c del @file"

Otros consejos

La forma más sencilla sería ejecutar un archivo .bat semanal o mensualmente.

cd \mylog\dir
mkdir archive
del /Q .\archive\*.log
move *.log .\archive

Si desea algo más complejo, considere descargar las herramientas cygwin para usar comandos similares a un*x, o posiblemente busque Powershell.

Con VBScript, adaptado de ScriptingRespuestas

Dim fso, startFolder, OlderThanDate
Set fso = CreateObject("Scripting.FileSystemObject")

startFolder = "E:\temp"           ' folder to start deleting (subfolders will also be cleaned)

OlderThanDate = DateAdd("d", -07, Date)  ' 07 days (adjust as necessary)

DeleteOldFiles startFolder, OlderThanDate

Function DeleteOldFiles(folderName, BeforeDate)
    Dim folder, file, fileCollection, folderCollection, subFolder

    Set folder = fso.GetFolder(folderName)

    Set fileCollection = folder.Files

    For Each file In fileCollection
        If file.DateLastModified < BeforeDate Then
            ' fso.DeleteFile(file.Path)    # Modify this to delete after testing
            WScript.StdOut.WriteLine (file.Path)
        End If
    Next

    Set folderCollection = folder.SubFolders
    For Each subFolder In folderCollection
        DeleteOldFiles subFolder.Path, BeforeDate
    Next

End Function

Puedes ejecutar este script con CScript

@Jason:buena utilidad, FORFILES del kit de recursos

Programe un archivo por lotes para manejar esto.

Esta línea eliminará todos los archivos (*.*) en c:\mydirectory que tengan más de 14 días:

FORFILES -pc:\mydirectory -s -m*.* -d-14 -c"DEL @FILE"

Ponlo en un archivo de texto, cámbiale el nombre a algo como "deletefiles.bat" y prográmalo.

No lo he probado, pero debería ser bastante fácil de probar.


EDITAR:Si usa esto, asegúrese de comprender lo que está sucediendo: el indicador -s le indica que recurra a los subdirectorios, y es posible que eso no sea lo que desea que suceda.Además, es posible que también deba especificar algunas opciones para el comando DEL.:)


EDITAR:Se dio cuenta de que necesita descargar cosas de Microsoft para que FORFILES funcione.También me gusta la solución aceptada, ya que no es necesario tener nada especial.El único problema es que solo ocurre cada dos semanas en lugar de ejecutar un proceso diario para eliminar todo lo que tenga más de 14 días.Por lo que eso vale.:PAG

¿Por qué no escribe un archivo por lotes o un script de PowerShell y lo programa?

Guion para eliminar archivos anteriores a una fecha especificada.

Es bastante trivial hacerlo si tienes Perl (o similar) instalado en el servidor:

#!perl
foreach my $file (</path/to/logs/*.log>) {
  next unless -M $file > 14;
  print "Deleting $file...\n";
  # unlink $file or die "Failed to remove $file: $!";
}

La línea que realmente elimina está comentada, ya que puede haber niños en la casa :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top