FORFILES : un outil en ligne de commande Windows pour gérer simplement la rétention de fichiers

Dans mon quotidien, je cherche autant que cela se peut à automatiser les tâches courantes. Sauvegarde & archivages sont en haut de la liste de mes préoccupations et Powershell est mon outil privilégié sous Windows.

Mes scripts génèrent des fichiers de données, de log… que je souhaite conserver un certain temps. Mais il faut que je prévoie une purge des anciens fichiers pour ne pas remplir mes serveurs de journaux devenus inutiles.

Dans la rédaction de tous mes scripts, la difficulté à gérer la rétention des fichiers revient régulièrement : En fonction du contexte applicatif, je me base sur des attributs de fichiers, la date de création ou – le cas souvent le plus complexe – l’analyse du nom du fichier…

Cette semaine, alors que je regardais l’excellent outil de sauvegarde HVBAckup, je suis tombé sur un exemple de scripts SHELL qui m’a interpellé ! Il faisait référence à une commande FORFILES que je ne connaissais pas.

Il s’agit en fait d’une commande désormais native sous Windows 2008 R2 qui permet d’exécuter une commande les fichiers ne répondant qu’à des critères de DATE ou de MASQUE de NOM.

Syntaxe

La syntaxe de base est la suivante (source : http://ss64.com/nt/forfiles.html):

FORFILES [/p Path] [/m Mask] [/s] [/c Command] [/d [+ | -] {dd/MM/yyyy | dd}

Key

/p Path The Path to search (default=current folder)

/s Recurse into sub-folders

/C command The command to execute for each file. Wrap the command string in double quotes. Default = “cmd /c echo @file”

The Command variables listed below can also be used in the command string.

/D date Select files with a last modified date greater than or equal to (+), or less than or equal to (-), the specified date using the “dd/MM/yyyy” format;

/D + dd Select files with a last modified date greater than or equal to the current date plus “dd” days. (in the future)

/D – dd Select files with a last modified date less than or equal to the current date minus “dd” days. (in the past)

A valid “dd” number of days can be any number in the range of 0 to 32768. (89 years) “+” is taken as default sign if not specified.

La commande peut utiliser des variables relatives au fichier retenu :

@file The name of the file.

@fname The file name without extension.

@ext Only the extension of the file.

@path Full path of the file.

@relpath Relative path of the file.

@isdir Returns “TRUE” if a file type is a directory, and “FALSE” for files.

@fsize Size of the file in bytes.

@fdate Last modified date of the file.

@ftime Last modified time of the file.

Quelques exemples

Dans la pratique, voilà ce que ça donne:

Supprimer tous les fichiers “testfiles.txt” datant de plus de 5 jours

C:> forfiles /m testfile.txt /c “cmd /c Del testfile.txt ” /d -5

Liste les fichiers EXCEL n’ayant pas été modifiés depuis plus de 30 jours

C:> FORFILES /M *.xls /C “cmd /c echo @path was changed 30 days ago” /D -30

Lister les fichiers DOC present dans le dossier courant et tous les sous-dossiers

C:> FORFILES /S /M *.doc /C “cmd /c echo @fsize”

Supprimer tous les fichiers ZIP datant de plus de 7 jours dans le dossier \yourserveryourpath

set BCKPATH=”\yourserveryourpath”

pushd %BCKPATH% && forfiles.exe -m *.zip -d -7 -c “cmd /c del @path”

popd

Tout simplement génial et tellement pratique !

A propos Olivier Olejniczak

Cofondateur de SynerGeek.fr. Passionné d'informatique, je m'intéresse plus particulièrement aux technologies de virtualisation et de stockage. J'apprécie la liberté et la quasi-absence de frontières à mon imagination qu'offre l'OpenSource et Linux. Professionnellement, je travaille exclusivement avec les outils Microsoft. Les pieds bien sur terre et ancrés dans le quotidien de l'entreprise, j'aime faire partager mes découvertes et contribuer à un meilleur usage des technologies. Vous aussi, rejoignez-nous sur Synergeek et partagez votre expérience!

Je vous propose également...

JSON dans les scripts Bash avec Ticktick

Je vais vous présenter l’ami du WGET par excellence. Imaginez le contexte suivant : sur …

Winguggle, un utilitaire bien pratique

Winguggle est un utilitaire qui peut servir à personnaliser les informations OEM contenues dans les …

3 commentaires

  1. Elle fonctionne bien sur Windows 7 mais semble incompatible avec Windows XP

  2. Très pratique en effet. Merci.

  3. Sympa .. et ça tombe bien car du nettoyage à faire dans des datas stockés sur un serveur.

    Si il existe aussi une commande permettant de trouver les fichiers dupliqués, je suis preneur !!

    J’ai bien trouvé SearchMyFiles de NirSoft. Quelle fiabilité sur les utilitaires NirSoft ? J’aurai préféré trouver un équivalent Windows Sysinternals ..

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *