Comment effacer automatiquement des fichiers et répertoires

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
jbongran
Le #658052
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")

Michel Claveau
Le #658050
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
Pierre-Yves Huguenin
Le #657814
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" 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





Jacques Barathon [MS]
Le #657813
"Pierre-Yves Huguenin" 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

Gilles LAURENT
Le #660555
"Pierre-Yves Huguenin" 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
Jacques Barathon [MS]
Le #660550
"Gilles LAURENT" 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

Pierre-Yves Huguenin
Le #665177
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]" message de news:
"Gilles LAURENT" 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



Publicité
Poster une réponse
Anonyme