Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1359 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Rechercher des dossiers et les supprimer

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Rechercher des dossiers et les supprimer

n°1218180
Iceman088
Posté le 08-10-2005 à 08:50:10  profilanswer
 

Bonjour tout le monde,  
 
Je cherche une solution en batch afin d'effectuer une recherche spécifique sur une partition.  
 
Je souhaite rechercher tous les dossiers intitulés "toto" et qu'à la suite de cette recherche, ces dossiers "toto" (et leur contenu) soit effacés.  
 
Quelqu'un aurait-il une solution à me proposer ?
 
Un grand merci par avance.


---------------
Si ça continue, va falloir qu'ça cesse !!!
mood
Publicité
Posté le 08-10-2005 à 08:50:10  profilanswer
 

n°1218209
olivthill
Posté le 08-10-2005 à 10:39:21  profilanswer
 

Pourrais-tu indiquer, s'il te plait, sous quel système d'exploitation, et avec quel shell s'il s'agit d'Unix ?

n°1218212
Iceman088
Posté le 08-10-2005 à 10:52:45  profilanswer
 

olivthill a écrit :

Pourrais-tu indiquer, s'il te plait, sous quel système d'exploitation, et avec quel shell s'il s'agit d'Unix ?


 
Oups, désolé...  
 
W2k et XP


---------------
Si ça continue, va falloir qu'ça cesse !!!
n°1218240
olivthill
Posté le 08-10-2005 à 11:39:56  profilanswer
 

Pour obtenir la liste de tous les dossiers en dessous de C:\Scripts, j'itilise le script suivant :

Code :
  1. Set FSO = CreateObject("Scripting.FileSystemObject" )
  2. ShowSubfolders FSO.GetFolder("C:\\Scripts" )
  3. Sub ShowSubFolders(Folder)
  4.     For Each Subfolder in Folder.SubFolders
  5.         Wscript.Echo Subfolder.Path
  6.         ShowSubFolders Subfolder
  7.     Next
  8. End Sub

Ces lignes sont mise dans un fichier "searchfolder.vbs" que l'on exécute en cliquant dessus, ou en tapant "cscript.exe searchfolder.vbs" depuis une fenêtre DOS.
 
En l'adaptant un peu, j'obtiens le script pour supprimer tous les dossiers intitulés "toto" qui se trouvent en dessous de "c:\test":

Code :
  1. Set FSO = CreateObject("Scripting.FileSystemObject" )
  2. subfolder_a_chercher = "toto"
  3. ShowSubfolders FSO.GetFolder("C:\\test" ), subfolder_a_chercher
  4. Sub ShowSubFolders(Folder, subfolder_a_chercher)
  5.     For Each Subfolder in Folder.SubFolders
  6.         If (Subfolder.name = subfolder_a_chercher) Then
  7.             Wscript.Echo Subfolder.name
  8.             FSO.DeleteFolder(Subfolder.Path)
  9.         Else
  10.            ShowSubFolders Subfolder, subfolder_a_chercher
  11.         End If
  12.     Next
  13. End Sub


"Subfolder.Path" renvoie le nom du dossier avec le chemin complet.
"Subfolder.name" renvoie le nom du dossier sans le chemin.
 :)
Edit : J'avais oublié qu'il faut deux antislashs pour que le message en affiche un dans une boite de code.


Message édité par olivthill le 08-10-2005 à 11:42:29
n°1219153
ramkin
Posté le 10-10-2005 à 00:06:08  profilanswer
 

Salut,
 
je m'incruste parce que justement je voulais faire exactement la même chose sur un serveur NT4 pour supprimer des dossiers Profils.
 
olivthill, je viens de faire un petit test sur mon W2000, et ça marche nickel!!  :bounce:  
 
Y a t-il moyen d'y apporter deux petites modifications:
1) Ne pas supprimer le dossier "toto" mais juste son contenu
2) A chaque dossier "toto" trouvé, une petite fenêtre s'ouvre pour confirmer. On clique ok et hop au suivant. Comme j'aurais plus de 800 dossiers à supprimer, peut-on passer outre cette fenêtre?

n°1219239
Iceman088
Posté le 10-10-2005 à 09:11:43  profilanswer
 

Merci pour ta réponse olivthill. Je teste ça et reviens te donner mon feedback (je suis newbie en vbs).


---------------
Si ça continue, va falloir qu'ça cesse !!!
n°1219396
olivthill
Posté le 10-10-2005 à 12:08:51  profilanswer
 

Voici une version adaptée pour toi, Ramkin.

Code :
  1. ' Suppression du contenu de certains sous répertoires
  2. Set fso = CreateObject("Scripting.FileSystemObject" )
  3. dossier_a_chercher = "toto"
  4. cherche_dossier fso.GetFolder("C:\\test" ), dossier_a_chercher
  5. ' Rechercher un dossier
  6. Sub cherche_dossier(un_dossier, dossier_a_chercher)
  7.     For Each un_sousdossier In un_dossier.SubFolders
  8.        If (un_sousdossier.name = dossier_a_chercher) Then
  9.           supp_dans_dossier un_sousdossier
  10.        End If
  11.        cherche_dossier un_sousdossier, dossier_a_chercher
  12.     Next
  13. End Sub
  14. ' Supprimer le contenu d'un dossier
  15. Sub supp_dans_dossier(un_dossier)
  16.     ' Supprimer les sous-répertoires
  17.     For Each sf1 in un_dossier.SubFolders
  18.        If (MsgBox("Voulez-vous supprimer " & sf1.Path & " ?", 1) = 1) Then
  19.           fso.DeleteFolder(sf1.Path)
  20.        End If
  21.     Next
  22.     ' Supprimer les fichiers
  23.     For Each f1 in un_dossier.Files
  24.        If (MsgBox("Voulez-vous supprimer " & f1.Path & " ?", 1) = 1) Then
  25.           fso.DeleteFile(f1.Path)
  26.        End If
  27.     Next
  28. End Sub

D'abord, le dossier "toto" est recherché récursivement sous c:\test.
Puis s'il est trouvé, son contenu est supprimé avec demandes de confirmation. Il est bien sûr possible de mettre les demandes de confirmation en commentaire en plaçant une apostrophe en début de ligne dans le code.

n°1219594
Iceman088
Posté le 10-10-2005 à 14:48:05  profilanswer
 

Merci beaucoup pour ton aide olivthill. J'ai tâtonné un petit peu au début car ton script (modifié avec mes valeurs) ne renvoyait aucun message. Puis je me suis aperçu qu'il fallait respecter la case. :p
 
Maintenant, je teste la solution que tu as soumis à ramkin car elle m'intéresse également ! ;) Je cherche surtout à supprimer la confirmation de suppression.


---------------
Si ça continue, va falloir qu'ça cesse !!!
n°1219868
ramkin
Posté le 10-10-2005 à 19:43:11  profilanswer
 

Alors moi je dis:
 

Citation :

:bounce:  :bounce: olivthill Président!! :bounce:  :bounce:


 
Ca marche impec! Et j'ai même compris comment supprimer la boite de dialogue.(qui d'ailleurs est très intelligement faite en rappelant le chemin du ficheir à supprimer..  :jap: )
 
10 000²² merci olivthill!!  
 
 :sol:

n°1220245
ramkin
Posté le 11-10-2005 à 10:57:49  profilanswer
 

C'est encore moi!!  :pt1cable:  
 
olivthill, dès que j'abuse tu le dis....  :whistle:  
 
Et dans la même genre d'idée:
 
1) Ca marche super sur un poste. Mais est-ce possible en réseau? Imagine, que des stations XP Pro dont il faut supprimer le même dossier. Problème, je ne vois pas bien quel chemin indiquer en place de "c:\test"
 
2) Et si au lieu de supprimer "toto" je voulais y copier "tata" dedans?
Ca ne serait pas juste ces lignes qu'il faudrait changer?

Citation :

If (Subfolder.name = subfolder_a_chercher) Then  
            Wscript.Echo Subfolder.name  
            FSO.DeleteFolder(Subfolder.Path)


 
 :sol:

mood
Publicité
Posté le 11-10-2005 à 10:57:49  profilanswer
 

n°1220257
olivthill
Posté le 11-10-2005 à 11:05:34  profilanswer
 

Cela me plait de répondre aux questions, donc si je peux, no problemo.
 
1) En réseau, je ne sais pas, désolé.
 
2) Oui, il faut remplacer les lignes citées, qui contiennent notamment DeleteFolder, par une ligne faisant appel à

FSO.CopyFile source, destination[, overwrite]

Le mot overwrite est optionnel, c'est pour permettre d'écraser un fichier qui existe déjà.
 
Pour copier un dossier, c'est pareil avec CopyFolder à la place de CopyFile  :)


Message édité par olivthill le 11-10-2005 à 11:08:04
n°1220374
ramkin
Posté le 11-10-2005 à 14:08:26  profilanswer
 

Et encore une fois, superbe!!!!  :bounce:  
 
Par contre je n'ai pas mis la commande [, overwrite] et ça overwrite quand même.
 
Merci bien pour ton aide, je vais garder ces scripts TRES précieusement.  :hello:  
 
Si jamais il te vient une idée pour faire ça au travers de tout un réseau, je me ferais un plaisir d'être ton bêta-testeur..  :)  
 
 :sol:

n°1224287
bbarry
vive les lignes de codes
Posté le 17-10-2005 à 11:08:39  profilanswer
 

bonjour lé gars je programme en vbscript mais lé fichiers que j'attaque sont codés en Unicode connaissez vous quel quelques choses  
qui peu m'aider pour lé transformer en ANSI

n°1227594
ramkin
Posté le 20-10-2005 à 22:42:23  profilanswer
 


olivthill......  :sweat:  
Je crois que j'ai un gros problème de syntaxe....
Normalement, cette petite fonction récurssivce est censée copier un fichier dans tous les dossiers "toto"
Mais ça coince là où c'est en gras à mon avis...
 
 

Citation :

Set fso = CreateObject("Scripting.FileSystemObject" )
 dossier_a_chercher = "toto"
 cherche_dossier fso.GetFolder("C:\test" ), dossier_a_chercher
 
 Sub cherche_dossier(un_dossier, dossier_a_chercher)
     For Each un_sousdossier In un_dossier.SubFolders
        If (un_sousdossier.name = dossier_a_chercher) Then  
           fso.CopyFile "C:\fichier_a_copier.txt", "un_sousdossier"
        End If
        cherche_dossier un_sousdossier, dossier_a_chercher
     Next
 End Sub
 


 

n°1227870
olivthill
Posté le 21-10-2005 à 11:50:59  profilanswer
 

Bonjour Ramkin,
 
Je crois qu'il faut enlever les guillemets et essayer

Code :
  1. fso.CopyFile "C:\fichier_a_copier.txt", un_sousdossier.Path

:)

n°1228400
ramkin
Posté le 21-10-2005 à 19:49:27  profilanswer
 

Merci olivthill pour cette réponse rapide.  :jap:  
 
Mais ça marche pas.....
 
http://img444.imageshack.us/img444/5830/clipboard010tc.jpg
 
la ligne 9 caractère 12 est justement le début de cette commande.

n°1228471
olivthill
Posté le 21-10-2005 à 21:20:02  profilanswer
 

Le message sur l'image indique "permission refusée". Cela siginifie que l'utilisateur (1) n'a pas le droit de copier le fichier (2) dans le dossier (3). Le problème est probablement dû à une protection du dossier (3), mais peut aussi venir des deux autres facteurs (1) et (2).

n°1228495
ramkin
Posté le 21-10-2005 à 22:22:47  profilanswer
 

olivthill a écrit :

Le message sur l'image indique "permission refusée". Cela siginifie que l'utilisateur (1) n'a pas le droit de copier le fichier (2) dans le dossier (3). Le problème est probablement dû à une protection du dossier (3), mais peut aussi venir des deux autres facteurs (1) et (2).


 
Oui mais c'est bien ça qui est bizarre.....C'est sur mon pc à moi, avec un seul utilisateur, administrateur, grand propriétaire de tout, j'ai nommé MOI!  :??:  
 
Tu es absolument certain de la syntaxe?

n°1228556
ramkin
Posté le 22-10-2005 à 00:37:49  profilanswer
 

Je viens de faire un essai pour régler cette histoire de permissions.
 
A la première itération, le sub se retrouve dans le dossier C:\test\toto, et c'est alors la valeur de la variable un_sousdossier.
En mettant comme ligne de code:

Citation :

FSO.CopyFile "C:\fichier_a_copier.txt", "c:\test\toto\"


aucun problème de "permission"....et ça fonctionne bien.
 
Donc dans :

Citation :

fso.CopyFile "C:fichier_a_copier.txt", un_sousdossier.Path


 
c'est la référence à un_sousdossier.Path qui n'est pas comprise....
 
 :heink:

n°1228619
olivthill
Posté le 22-10-2005 à 09:43:53  profilanswer
 

La solution est :

fso.CopyFile "C:\\fichier_a_copier.txt", un_sousdossier.Path & "\\"

Cettte fois-ci, j'ai pris le temps de tester, et cette nouvelle ligne marche chez moi.
 
Le problème n'était causé par un manque de permission, mais par un nom de dossier ne se terminant pas par un anti-slash "\". Pour le constater, on peut faire un test avec Wscript.Echo un_sousdossier.Path. Donc, il fallait ajouter & "\\" (en VB, c'est le "&" qui permet d'ajouter une chaine à une autre, par exemple "bonjour, " & "tout le monde" ).
 
Excuse-moi de ne pas m'être aperçu plus tôt du problème de l'anti-slash. :)

n°1228712
ramkin
Posté le 22-10-2005 à 14:04:25  profilanswer
 

Encore une fois, bravo!  :jap:  
J'avais aussi pensé à l'anti-slah mais j'avais essayé un_sousdossier\ et "un_sousdossier\"   :pfff:  
 
Donc tout est parfait!!
Et encore une fois merci.
 

olivthill a écrit :


Excuse-moi de ne pas m'être aperçu plus tôt du problème de l'anti-slash. :)


 
[Mode Dark Vador=ON]
 
Excuses acceptées général.
 
[Mode Dark Vador=OFF]
 
 :sol:  

n°1368980
psymon sta​rk
smash
Posté le 17-05-2006 à 16:54:44  profilanswer
 

et c'est quoi la commande à la place de "deletefile" pour:
1. ouvrir
2. déplacer à un autre emplacement
 
merki de vos reponses

n°1379478
naindjardi​n45
Posté le 02-06-2006 à 09:18:07  profilanswer
 

Salut à tous. Et loué soit olivthill  :jap:  qui a réondu à mon problème sans que j'ai besoin de demander  :D  
 
Mais suite à ça justement j'avais une question à poser à olivthill comme à tous ceux qui peuvent me répondre.
 
J'ai rentré mon code pour la suppression de fichiers dans mon_programme_script.vbs, j ai fait le test tout marche.Mais je ne sais comment faire pour tester la date du fichier cible qui sera supprimer plus précisément le mois.(je ne parle pas du dossier car je ne veut pas supprimer les dossiers)Parce qu'en fait je dois faire un programme qui teste les date d'un fichier avec la date d'aujourd'hui, par exemple, et si le fichier est vieux de + d'un mois ca me le vire.  
 
(Par contre j'annonce je suis un gros noob en VBs et comme apr hasard jdois faire un script :cry:  alors je galère.)
 
J'en viens à ma question; comment puis-je faire pour récupérer dans une variable la date de mon fichier????Pour après la comparer avec la date d'aujourd'hui? Sachant que je n'ai besoin que du mois.  :cry:  
 
 (Je sais c'est fouilli mais je c'est pas comment synthétiser la question  :whistle: )  
 
P.S : Ne me donnez pas de lien internet svp, mais je demande pas qu'on me mache le travail non plus, juste me donner la commande qui appel la date du jour et la commande pour avoir la date du fichier.Après j'ai déjà fait l'algorithme donc je saurais faire mon script (normalement).


Message édité par naindjardin45 le 02-06-2006 à 09:19:48

---------------
Y a des jours où faut pas m'faire chier, y a des jours tous les jours!
n°1382070
naindjardi​n45
Posté le 06-06-2006 à 14:25:58  profilanswer
 

up


---------------
Y a des jours où faut pas m'faire chier, y a des jours tous les jours!
n°1383824
naindjardi​n45
Posté le 08-06-2006 à 15:14:28  profilanswer
 

mon probleme est résolu je n'ai eu besoin de personne  :D


---------------
Y a des jours où faut pas m'faire chier, y a des jours tous les jours!
n°1871322
air91
MP 91 ou 75
Posté le 08-04-2009 à 22:43:51  profilanswer
 

trop fort :D


---------------
Feed-Back @ir91  
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Rechercher des dossiers et les supprimer

 

Sujets relatifs
Supprimer une ligne spécifique dans un fichierDouble scrollbar : comment en supprimer une ?
Comment supprimer l'extension d'une variable ?supprimer une ligne d'un tableau
Supprimer "Public Const WSBase" ??supprimer ou remplacer "alt entrée" à travers vba
Comment supprimer une CLE registre en batch[Flash/ActionScript] Supprimer les lignes crées avec AS
url rewriting probleme - dossiers -> variable, possible ?supprimer le Timeout php avec Xampp
Plus de sujets relatifs à : Rechercher des dossiers et les supprimer


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR