windows file maintenance

¿Cómo borro archivos viejos de un directorio mientras mantengo los más recientes en Windows[duplicado]?



file maintenance (6)

Posible duplicado:
Archivo por lotes para eliminar archivos anteriores a N días

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

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

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

Aclamaciones

Nige


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

Script para eliminar archivos anteriores a una fecha especificada.


Con VBScript, adaptado de Scripting Answers

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

Puede ejecutar este script con CScript

@Jason: buena utilidad, FORFILES del Resource Kit


Es bastante trivial si tienes un 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 hace la eliminación está comentada, ya que puede haber niños en la casa :)


La forma más simple sería ejecutar un archivo .bat semanalmente o mensualmente.

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

Si desea algo más complejo, busque la descarga de las herramientas de cygwin para usar comandos de tipo * x like, o posiblemente busque en Powershell.


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, renómbralo a algo como "deletefiles.bat" y programalo.

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

EDITAR: Si usas esto, asegúrate de que entiendes lo que está sucediendo: el indicador -s indica que debe recurrir a los subdirectorios, y eso puede no ser lo que quieres que suceda. Además, es posible que también deba especificar algunos indicadores 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 tienes que tener nada especial. El único problema es que solo ocurre cada dos semanas en lugar de ejecutar un proceso todos los días para eliminar todo lo anterior a 14 días. Por lo que eso vale. :PAG


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