Come faccio a eliminare i vecchi file da una directory, mantenendo più recenti su Windows [duplica]

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

  •  09-06-2019
  •  | 
  •  

Domanda

Possibile Duplicare:
Batch file per eliminare i file più vecchi di N giorni

Voglio eseguire una pianificata attività di windows che elimina tutti i file da una directory più di 2 settimane.

Il motivo è che questi sono IIS e Tomcat registri di che riempire il mio server, ma voglio mantenere le registrazioni più recenti nel caso ho bisogno di indagare un problema.

Non so di un modo semplice per fare questo?

Cheers

Nigeria

È stato utile?

Soluzione

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

Altri suggerimenti

Il modo più semplice sarebbe un .bat file run run settimanale o mensile.

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

Se vuoi qualcosa di più complesso aspetto a scaricare il cygwin strumenti per usare un*x, come comandi, o, eventualmente, di guardare in Powershell.

Con VBScript, adattato da ScriptingAnswers

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

È possibile eseguire questo script con il comando CScript

@Jason:bella utilità, FORFILES dal Resource Kit

Pianificare un file batch per gestire questo.

Questa linea di eliminare tutti i file (*.*) in c:\mydirectory che sono di età superiore a 14 giorni:

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

Mettere in un file di testo, rinominarlo in qualcosa come "deletefiles.bat" e pianificare.

Non ho provato questo, ma dovrebbe essere abbastanza facile da provare.


EDIT:Se si utilizza, assicurarsi di comprendere ciò che sta accadendo - the-flag s dice di recurse le sottodirectory, e che non può essere quello che si vuole che accada.Inoltre, potrebbe essere necessario specificare alcune bandiere per il comando DEL troppo.:)


EDIT:Reso conto che è necessario scarica roba da Microsoft in ordine per FORFILES di lavoro.Mi piace la soluzione accettata troppo, dal momento che non hanno nulla di speciale.L'unico problema è che succede solo ogni due settimane invece di eseguire un processo ogni giorno per rimuovere tutte le cose di età superiore a 14 giorni.Per quello che vale.:P

Perchè non scrivere un file batch o uno script di powershell e pianificata?

Script per eliminare i file più vecchi di una certa data.

E ' abbastanza semplice da fare se si dispone di un perl (o simili) installato sul server:

#!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 linea che in realtà non elimina commento, dato che ci potrebbero essere bambini in casa :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top