Vider un dossier [Résolu]

Utilisateur anonyme - 1 mars 2015 à 19:20 - Dernière réponse :  auditorium
- 16 déc. 2017 à 12:09
Bonjour,
J'ai commencé le VBS il y a seulement 3 jours et je me suis lancé dans la création d'un script de nettoyage des fichiers temporaires. J'aimerai savoir comment faire pour vider un dossier (supprimer tout son contenu) sans supprimer le dossier.
Merci


PS:Si quelqu'un peux m'aider ou connait un site pour se lancer dans le programmation je suis preneur
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Hackoo 40 Messages postés jeudi 10 juillet 2003Date d'inscription 17 janvier 2017 Dernière intervention - Modifié par Hackoo le 1/03/2015 à 23:19
2
Merci
Voici un vbscript qui peut répondre à vos besoins !
Option Explicit
Const Titre = "Script de nettoyage des fichiers et sous-dossiers by Hackoo 2015"
Const strPath = "c:\test"
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not objFSO.FolderExists(strPath) Then
MsgBox "Erreur dans chemin du dossier """& strPath &"""",VbCritical,Titre
Wscript.Quit
End if
Call Cleanup(strPath)
MsgBox "Tous les fichiers et les sous-dossiers du répertoire """& strPath &""""& Vbcr &_
" ont été supprimés !",Vbinformation,Titre
'*******************************************************************
Sub Cleanup(str)
Dim objFolder,objSubFolder,objFile
Set objFolder = objFSO.GetFolder(str)
For Each objFile In objFolder.Files
objFile.Delete(True)
Next

For Each objSubFolder In objFolder.SubFolders
Cleanup(objSubFolder.Path)' appel récursive dans la même fonction
'Les fichiers ont été supprimés,on vérifie si le dossier est vide.
If (objSubFolder.Files.Count = 0) Then
objSubFolder.Delete True
End If
Next
End Sub
'******************************************************************


Vive l'opensource (-_°)

Merci Hackoo 2

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Hello
Pourquoi ne pas récupérer les variables TMP et TEMP de l'utilisateur et du système ?

Cordialement
Commenter la réponse de Hackoo
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 1 mars 2015 à 20:03
1
Merci
Bonjour,
< <les fichiers d'un seul dossier ou tous les fichiers de ce dossier et de ses éventuels sous-dossiers ? (ce n'est pas la même chose).L
Utilisateur anonyme - 1 mars 2015 à 20:17
Tous les fichiers et les sous-dossiers du dossier.
En gros j'ai un dossier "x", il est plein je veux qu'après avoir exécute mon script dossier "x" soit vide
Merci
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 1/03/2015 à 20:18
1
Merci
Je n'ai pas fait de vbs depuis au moins 15 ans. J'ai même inhibé vbs de ma machine, mais :
je sais que :
1)
Set toto = CreateObject("Scripting.FileSystemObject")
toto.DeleteFile("d:\monoutil\*.*")

"zigouillera tous les fichiers non cachés de d:\monoutil
et 2)
que
Set toto = CreateObject("Scripting.FileSystemObject")
Set titi = toto.GetFolder("d:\monoutil")
Set tata = titi.Subfolders
For Each objSubfolder in tata
Wscript.Echo objSubfolder.Name
Next

me recense chaque dossier de 1er rang du dossier d:\monoutil
Il ne te reste plus qu'à :
A) faire de la récursivité pour traiter les éventuels sous-dossiers des sous-dossiers
B) utiliser le deletefile montré en 1 pour chaque dossier et chaque sous-dossier
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 2 mars 2015 à 06:52
1
Merci
Regarde aussi ce que fait ceci, depuis le pseudo dos de windows
del /Q/S d:\bof\*.*


où d:\bof est le dossier à vider (ainsi que ses sous-dossiers).
Commenter la réponse de ucfoutu
Utilisateur anonyme - 2 mars 2015 à 08:55
1
Merci
Merci beaucoup à vous deux je mets en résolu
Commenter la réponse de Utilisateur anonyme
0
Merci
Merci beaucoup j'essai et je mets en résolu si c'est bon.

edit: J'ai finalement opté pour le code de Hackoo qui supprimer tous les fichiers et dossiers cachés
Juste un dernier petit truc si j'envoi mon script à un ami s'il le lance il aura un problème de chemin d'accès puisque ce n'est pas le même nom de session.Y a-t-il un moyen pour que le chemin d'accès change.
x=ma session
C:\Users\x\AppData\Local\Temp
C'est ce dossier que je veux vider mais du coup x dois changer en fonction des ordi sur lequel je lance le script
Merci
Commenter la réponse de Utilisateur anonyme
cs_Le Pivert 5450 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention - 2 mars 2015 à 08:12
0
Merci
Bonjour,

Pour afficher la boite de dialogue d'ouverture de dossiers et connaître leur chemin:

Dim oFolder, oShell
Dim Chemin
Set oShell = CreateObject("Shell.Application") 
Set oFolder = oShell.BrowseForFolder(&H0&, "Choisir un répertoire", RETURNONLYFSDIRS, "c:\") 
If oFolder is Nothing Then  
	MsgBox "Abandon opérateur",vbCritical 
Else 
  Set oFolderItem = oFolder.Self 
 Chemin=oFolderItem.path 
MsgBox Chemin & "\"
End If

Commenter la réponse de cs_Le Pivert
Hackoo 40 Messages postés jeudi 10 juillet 2003Date d'inscription 17 janvier 2017 Dernière intervention - 2 mars 2015 à 08:34
0
Merci
Ce script va effacer tous les fichiers et les sous-dossiers du dossier temporaire Temp

Option Explicit
Const Titre = "Script de nettoyage des fichiers et sous-dossiers by Hackoo 2015"
Dim objFSO,ws,strPath,Temp,Question
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set ws = CreateObject("WScript.Shell")
Temp = ws.ExpandEnvironmentStrings("%Temp%")'Dossier temporaire
strPath = Temp
Question = Msgbox("ATTENTION ! "& vbcr &_
"Le script va effacer tous les fichiers et les sous-dossiers du dossier "& vbcr &_
DblQuote(Temp) & vbcr & "Voulez-vous continuer ou non ? ",VbYesNo+VbExclamation,Titre)
If Question = VbNo Then
Wscript.Quit
end if
If Question = VbYes Then
If Not objFSO.FolderExists(strPath) Then
MsgBox "Erreur dans chemin du dossier "& DblQuote(strPath),VbCritical,Titre
Wscript.Quit
End if
Call Cleanup(strPath)
end if
MsgBox "Tous les fichiers et les sous-dossiers du répertoire "& DblQuote(strPath) & Vbcr &_
" ont été supprimés !",Vbinformation,Titre
'*******************************************************************
Sub Cleanup(str)
On Error Resume Next
Dim objFolder,objSubFolder,objFile
Set objFolder = objFSO.GetFolder(str)
For Each objFile In objFolder.Files
objFile.Delete(True)
Next

For Each objSubFolder In objFolder.SubFolders
Cleanup(objSubFolder.Path)' appel récursive dans la même fonction
'Les fichiers ont été supprimés,on vérifie si le dossier est vide.
If (objSubFolder.Files.Count = 0) Then
objSubFolder.Delete True
End If
Next
End Sub
'******************************************************************
'Fonction pour ajouter les doubles quotes dans une variable
Function DblQuote(Str)
DblQuote = Chr(34) & Str & Chr(34)
End Function
'******************************************************************

Commenter la réponse de Hackoo
Hackoo 40 Messages postés jeudi 10 juillet 2003Date d'inscription 17 janvier 2017 Dernière intervention - 2 mars 2015 à 10:04
0
Merci
J'ai ajouté un LogFile pour les erreurs qu'on peut les avoir lors de la suppression des fichiers qui sont bloqués par le système.

Option Explicit
Const Titre = "Script de nettoyage des fichiers et sous-dossiers by Hackoo 2015"
Dim objFSO,ws,strPath,Temp,Question,LogFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set ws = CreateObject("WScript.Shell")
LogFile = Left(Wscript.ScriptFullName,InstrRev(Wscript.ScriptFullName, ".")) & "txt"
if objFSO.FileExists(LogFile) Then 'Si le fichier LogFile existe
objFSO.DeleteFile LogFile 'alors on le supprime
end If
Temp = ws.ExpandEnvironmentStrings("%Temp%")'Dossier temporaire
strPath = Temp
Question = Msgbox("ATTENTION ! "& vbcr &_
"Le script va effacer tous les fichiers et les sous-dossiers du dossier "& vbcr &_
DblQuote(Temp) & vbcr & "Voulez-vous continuer ou non ? ",VbYesNo+VbExclamation,Titre)
If Question = VbNo Then
Wscript.Quit
end if
If Question = VbYes Then
If Not objFSO.FolderExists(strPath) Then
MsgBox "Erreur dans chemin du dossier "& DblQuote(strPath),VbCritical,Titre
Wscript.Quit
End if
Call Cleanup(strPath)
end if
MsgBox "Tous les fichiers et les sous-dossiers du répertoire "& DblQuote(strPath) & Vbcr &_
" ont été supprimés !",Vbinformation,Titre
'*******************************************************************
Sub Cleanup(str)
On Error Resume Next
Dim objFolder,objSubFolder,objFile
Set objFolder = objFSO.GetFolder(str)
For Each objFile In objFolder.Files
objFile.Delete(True)
If Err <> 0 Then
Call WriteLog(DblQuote(objFile) & " ===> "& Err.Description,LogFile)
End if
Next
'Traitement des sous-dossiers
For Each objSubFolder In objFolder.SubFolders
Cleanup(objSubFolder.Path)' appel récursive dans la même fonction
'Les fichiers ont été supprimés,on vérifie si le dossier est vide alors,on le supprime.
If (objSubFolder.Files.Count = 0) Then
objSubFolder.Delete(True)
End If
Next
End Sub
'******************************************************************
'Fonction pour ajouter les doubles quotes dans une variable
Function DblQuote(Str)
DblQuote = Chr(34) & Str & Chr(34)
End Function
'******************************************************************
'Fonction pour écrire le résultat dans un fichier texte
Sub WriteLog(strText,LogFile)
Dim fs,ts
Const ForAppending = 8
Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.OpenTextFile(LogFile,ForAppending,True)
ts.WriteLine strText
ts.Close
End Sub
'*****************************************************************

Commenter la réponse de Hackoo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.