Comment effacer automatiquement des fichiers et répertoires
7 réponses
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).
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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")
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
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
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
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.)
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
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
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" <pierre-yves.huguenin@bluewin.ch> a écrit dans le
message de news: OUYOTXEeHHA.284@TK2MSFTNGP05.phx.gbl...
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).
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
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
"Pierre-Yves Huguenin" <pierre-yves.huguenin@bluewin.ch> wrote in message
news:OUYOTXEeHHA.284@TK2MSFTNGP05.phx.gbl...
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.
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
"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
"Pierre-Yves Huguenin" <pierre-yves.huguenin@bluewin.ch> a écrit dans
le message de news:OUYOTXEeHHA.284@TK2MSFTNGP05.phx.gbl
| 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
"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
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
"Gilles LAURENT" <glsft@free.fr> wrote in message
news:%23RrEXD4fHHA.1244@TK2MSFTNGP04.phx.gbl...
...
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.
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
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
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]" <jbaratho@online.microsoft.com> a écrit dans le
message de news: OZeqnI5fHHA.1252@TK2MSFTNGP04.phx.gbl...
"Gilles LAURENT" <glsft@free.fr> wrote in message
news:%23RrEXD4fHHA.1244@TK2MSFTNGP04.phx.gbl...
...
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.
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.