Come faccio a eliminare i vecchi file da una directory, mantenendo più recenti su Windows [duplica]
-
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
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 :)