Como excluo arquivos antigos de um diretório enquanto mantenho os mais recentes no Windows [duplicado]

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

  •  09-06-2019
  •  | 
  •  

Pergunta

Possível duplicata:
Arquivo em lote para excluir arquivos com mais de N dias

Quero executar uma tarefa agendada do Windows que exclua todos os arquivos de um diretório com mais de duas semanas.

O motivo é que esses são os logs do IIS e do Tomcat que preenchem meu servidor, mas quero manter os logs mais recentes caso precise investigar um problema.

Alguém sabe uma maneira fácil de fazer isso?

Saúde

Níger

Foi útil?

Solução

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

Outras dicas

A maneira mais simples seria um arquivo de execução .bat executado semanalmente ou mensalmente.

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

Se você quiser algo mais complexo, baixe as ferramentas cygwin para usar comandos do tipo un*x ou, possivelmente, dê uma olhada no Powershell.

Com VBScript, adaptado de Respostas de script

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

Você pode executar este script com CScript

@Jasão:bom utilitário, FORFILES do Resource Kit

Agende um arquivo em lote para lidar com isso.

Esta linha excluirá todos os arquivos (*.*) em c:\mydirectory com mais de 14 dias:

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

Coloque isso em um arquivo de texto, renomeie-o para algo como "deletefiles.bat" e agende-o.

Eu não testei isso, mas deve ser fácil de tentar.


EDITAR:Se você usar isso, certifique-se de entender o que está acontecendo - o sinalizador -s informa para recorrer aos subdiretórios, e isso pode não ser o que você deseja que aconteça.Além disso, pode ser necessário especificar alguns sinalizadores para o comando DEL.:)


EDITAR:Percebi que você precisa baixar coisas da Microsoft para que FORFILES funcione.Também gosto da solução aceita, pois não precisa ter nada de especial.O único problema é que isso só acontece a cada duas semanas, em vez de executar um processo diariamente para remover todas as coisas com mais de 14 dias.Pelo que isso vale.:P

Por que você não escreve um arquivo em lote ou um script do PowerShell e o agenda?

Roteiro para excluir arquivos anteriores a uma data especificada.

É bastante trivial se você tiver um perl (ou similar) instalado no 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: $!";
}

A linha que realmente faz a exclusão está comentada, pois pode haver crianças na casa :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top