¿Cómo elimino archivos antiguos de un directorio manteniendo los más recientes en Windows [duplicado]
-
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
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 :)