Comment supprimer les anciens fichiers d'un répertoire tout en conservant les plus récents sous Windows [duplicata]

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

  •  09-06-2019
  •  | 
  •  

Question

Doublon possible :
Fichier batch pour supprimer les fichiers datant de plus de N jours

Je souhaite exécuter une tâche Windows planifiée qui supprime tous les fichiers d'un répertoire datant de plus de 2 semaines.

La raison en est que ce sont des journaux IIS et Tomcat qui remplissent mon serveur, mais je souhaite conserver les journaux les plus récents au cas où je devrais enquêter sur un problème.

Quelqu'un connaît-il un moyen simple de procéder ?

Acclamations

Nigéria

Était-ce utile?

La solution

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

Autres conseils

Le moyen le plus simple serait d’exécuter un fichier .bat exécuté de manière hebdomadaire ou mensuelle.

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

Si vous voulez quelque chose de plus complexe, envisagez de télécharger les outils cygwin pour utiliser des commandes de type un*x, ou éventuellement consultez Powershell.

Avec VBScript, adapté de Réponses aux scripts

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

Vous pouvez exécuter ce script avec CScript

@Jason :bel utilitaire, FORFILES du kit de ressources

Planifiez un fichier batch pour gérer cela.

Cette ligne supprimera tous les fichiers (*.*) de c:\mydirectory datant de plus de 14 jours :

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

Mettez cela dans un fichier texte, renommez-le en quelque chose comme "deletefiles.bat" et planifiez-le.

Je n'ai pas testé cela, mais cela devrait être assez facile à essayer.


MODIFIER:Si vous l'utilisez, assurez-vous de comprendre ce qui se passe - l'indicateur -s lui indique de récurer les sous-répertoires, et ce n'est peut-être pas ce que vous souhaitez.En outre, vous devrez peut-être également spécifier certains indicateurs pour la commande DEL.:)


MODIFIER:J'ai réalisé que tu devais télécharger des trucs depuis Microsoft pour que FORFILES fonctionne.J'aime aussi la solution acceptée, car vous n'avez besoin de rien de spécial.Le seul problème est que cela n'arrive que toutes les deux semaines au lieu d'exécuter un processus quotidiennement pour supprimer tout ce qui date de plus de 14 jours.Pour ce que ça vaut.:P

Pourquoi n'écrivez-vous pas un fichier batch ou un script PowerShell et ne le planifiez-vous pas ?

Scénario pour supprimer des fichiers plus anciens qu'une date spécifiée.

C'est assez simple à faire si vous avez un perl (ou similaire) installé sur le serveur :

#!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 ligne qui effectue réellement la suppression est commentée, car il pourrait y avoir des enfants dans la maison :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top