Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment effacer automatiquement des fichiers et répertoires

7 réponses
Avatar
Pierre-Yves Huguenin
Bonjour,

Je dois écrire un fichier de commandes qui efface périodiquement les
fichiers et répertoires dont la dernière date d' accès ou de modification
est plus ancienne de 1 semaine (par exemple).

Quelqu'un peut-il me mettre sur la (bonne) voie ?

Merci d'avance
Pierre-Yves

7 réponses

Avatar
jbongran
Pierre-Yves Huguenin wrote:
Bonjour,

Je dois écrire un fichier de commandes qui efface périodiquement les
fichiers et répertoires dont la dernière date d' accès ou de
modification est plus ancienne de 1 semaine (par exemple).

Quelqu'un peut-il me mettre sur la (bonne) voie ?

Merci d'avance
Pierre-Yves



Devrait faire l'affaire
A noter qu'en l'état, il ne supprime rien mais affiche ce qui le serait,
pour qu'il supprime, enlever les apostrophes devant les fso.Delete(File ou
Folder)
Ne supprime pas les repertoires vides non plus, mais il suffit d'une toute
petite modif pour que ce soit le cas.

Dim fso, DateReference
Set fso = CreateObject("Scripting.FileSystemObject")
DateReference = DateAdd("d", -7, Now)

Sub EnumFolders(strFolder)
Dim oRootFolder, oFolder, oFolders
Set oRootFolder = fso.GetFolder(strFolder)
Set oFolders = oRootFolder.SubFolders
For Each oFolder In oFolders
If EnumFiles(oFolder) Then EnumFolders(oFolder)
Next
Set oFolders = Nothing
Set oRootFolder = Nothing
End Sub

Function EnumFiles(oFolder)
EnumFiles = True
Dim oFiles, oFile, oSubFolders
Set oFiles = oFolder.Files
Set oSubFolders = oFolder.SubFolders
If oFiles.Count = 0 And oSubFolders.Count = 0 Then
WScript.Echo "Dossier vide: " & oFolder
If oFolder.DateCreated < DateReference Or oFolder.DateLastModified <
DateReference Then
WScript.Echo "Suppression du dossier: " & oFolder
'fso.DeleteFolder oFolder
EnumFiles = False
Set oSubFolders = Nothing
Set oFiles = Nothing
Exit Function
End If
End If
For Each oFile In oFiles
If (oFile.DateCreated < DateReference) Then
WScript.Echo "Fichier: " & oFile.Path & " Date creation: " &
oFile.DateCreated & " Ref: " & DateReference
'fso.DeleteFile oFile, True
End If
If (oFile.DateLastModified < DateReference) Then
WScript.Echo "Fichier: " & oFile.Path & " Date modif: " &
oFile.DateLastModified & " Ref: " & DateReference
'fso.DeleteFile oFile, True
End If
Next
Set oSubFolders = Nothing
Set oFiles = Nothing
End Function

Call EnumFolders("D:Test")

Avatar
Michel Claveau
Bonsoir !

Le batch suivante suggère d'effacer tous les *.jpg dont la date de
dernière modif est antérieure au 04.04.2007 :

@echo off
setlocal

set annee 07
set mois
set jour

for /F "usebackq tokens=1,2,3,4,* delims=. " %%a in (`dir *.jpg /N
/4 /-C /T:W /O:D `) do call :SUB %%a %%b %%c %%d %%e %%f
endlocal
goto :EOF

:SUB
if /I %3 LSS %annee% goto :TRAIT
if /I %3 GTR %annee% goto :NON

if /I %2 LSS %mois% goto :TRAIT
if /I %2 GTR %mois% goto :NON

if /I %1 LSS %jour% goto :TRAIT
if /I %1 GEQ %jour% goto :NON

:TRAIT
echo SUPPRIMER %6 (%1 %2 %3)
goto :EOF

:NON
echo Laisser %6 (%1 %2 %3)
goto :EOF





Il suffit de remplacer l'echo par la commande voulue (del, move, copie,
etc.)




--
@-salutations

Michel Claveau
Avatar
Pierre-Yves Huguenin
Merci à jbongran et Michel

Je vais tester ces solutions et donnerai un feedback.

Question : est-ce que ces commandes traitent correctement les long noms de
fichiers ?

En effet il semble que le chemin maximum (y compris le nom du fichier) soit
limité à 255 caractères.

Meilleures salutations et bonnes fêtes de Pâques
Pierre-Yves

"Pierre-Yves Huguenin" a écrit dans le
message de news:
Bonjour,

Je dois écrire un fichier de commandes qui efface périodiquement les
fichiers et répertoires dont la dernière date d' accès ou de modification
est plus ancienne de 1 semaine (par exemple).

Quelqu'un peut-il me mettre sur la (bonne) voie ?

Merci d'avance
Pierre-Yves





Avatar
Jacques Barathon [MS]
"Pierre-Yves Huguenin" wrote in message
news:
Bonjour,

Je dois écrire un fichier de commandes qui efface périodiquement les
fichiers et répertoires dont la dernière date d' accès ou de modification
est plus ancienne de 1 semaine (par exemple).

Quelqu'un peut-il me mettre sur la (bonne) voie ?


La bonne voie consisterait à utiliser PowerShell :-) . Voici une ébauche de
solution, sans doute perfectible, qui supprime les fichiers et répertoires à
partir du répertoire courant qui ont une date d'accès antérieure à 7 jours:

dir | ?{$_.lastaccesstime -lt [datetime]::now.adddays(-7)} | del -rec -force

Si l'on veut filtrer le type de fichier, on peut modifier le dir en début de
ligne (ex: dir *.jpg pour ne supprimer que les fichiers jpg). Pour filtrer
sur plusieurs types de fichiers, on ajoutera les types en les séparant par
une virgule. Par exemple, dir *.jpg,*.tif,*.bmp.

Si l'on veut filtrer sur la date de modification, il faut remplacer
$_.lastaccesstime par $_.lastwritetime.

Si l'on veut filtrer sur une date précise, il faut remplacer
[datetime]::now.adddays(-7) par [datetime]"03/31/2007". Attention à utiliser
le format US MM/DD/YYYY.

Jacques

Avatar
Gilles LAURENT
"Pierre-Yves Huguenin" a écrit dans
le message de news:
| Bonjour,

Bonjour,

| Je dois écrire un fichier de commandes qui efface périodiquement les
| fichiers et répertoires dont la dernière date d' accès ou de
| modification est plus ancienne de 1 semaine (par exemple).
|
| Quelqu'un peut-il me mettre sur la (bonne) voie ?
|
| Merci d'avance
| Pierre-Yves

En complément des réponses précédentes, vous pouvez par exemple utiliser
des outils dédiés tels que :
ForFiles, natif sous Windows 2003 ou alors disponible en suivant le lien
ci-dessous :
http://www.dynawell.com/reskit/microsoft/win2000/forfiles.zip

DelOld, de John Savill
http://www.savilltech.com/delold

--
Gilles LAURENT
http://glsft.free.fr
Avatar
Jacques Barathon [MS]
"Gilles LAURENT" wrote in message
news:%
...
En complément des réponses précédentes, vous pouvez par exemple utiliser
des outils dédiés tels que :
ForFiles, natif sous Windows 2003 ou alors disponible en suivant le lien
ci-dessous :
...


Pour info, forfiles est également une ommande native sous Vista.

Jacques

Avatar
Pierre-Yves Huguenin
Bonjour à tous les intervenants et merci beaucoup pour toutes vos
propositions

Dans l'urgence j'ai utilisé un exécutable "expire.exe" (un outil que j'ai
trouvé sur un de nos serveurs) dans une commande NT et démarrée
automatiquement par le gestionnaire de tâches. Il efface les fichiers en
tenant compte de la date de création ainsi que tous les répertoires vides.

Je vais cependant étudier et tester les solutions avec le Powershell, les
commandes vbs, ainsi que la commande forfiles afin d'obtenir plus de
flexibilité.

Merci encore de votre aide et meilleures salutations
Pierre-Yves


"Jacques Barathon [MS]" a écrit dans le
message de news:
"Gilles LAURENT" wrote in message
news:%
...
En complément des réponses précédentes, vous pouvez par exemple utiliser
des outils dédiés tels que :
ForFiles, natif sous Windows 2003 ou alors disponible en suivant le lien
ci-dessous :
...


Pour info, forfiles est également une ommande native sous Vista.

Jacques