Vider un dossier

Résolu
Utilisateur anonyme - 1 mars 2015 à 19:20
 Baikal - 20 févr. 2020 à 16:38
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

9 réponses

Hackoo Messages postés 51 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 23 septembre 2022 8
Modifié par Hackoo le 1/03/2015 à 23:19
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 (-_°)
3
Hello
Pourquoi ne pas récupérer les variables TMP et TEMP de l'utilisateur et du système ?

Cordialement
0
Super ca marche du premier coup :)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 mars 2015 à 20:03
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
1
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 1/03/2015 à 20:18
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
1
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mars 2015 à 06:52
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).
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Hackoo Messages postés 51 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 23 septembre 2022 8
2 mars 2015 à 08:34
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
'******************************************************************

1
Utilisateur anonyme
2 mars 2015 à 08:55
Merci beaucoup à vous deux je mets en résolu
1
Hackoo Messages postés 51 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 23 septembre 2022 8
2 mars 2015 à 10:04
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
'*****************************************************************

1
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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
2 mars 2015 à 08:12
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

0
Rejoignez-nous