Détruire automatiquement des dossiers au moyen d'un .bat

Détruire automatiquement des dossiers au moyen d'un .bat - Shell/Batch - Programmation

Marsh Posté le 28-01-2004 à 11:41:33    

Je voudrais écrire une commande qui détruise automatiquement tous les dossiers dont le nom commence par 225 dans un dossier et dans ses sous-dossiers, au moyen d'une commande batch car je n'ai pas d'outil de compilation pour écrire des programmes.
 
L'équivalent avec des fichiers serait :
del C:\mondossier\225* /s
mais cela ne marche pas avec des dossiers.
 
Merci d'avance pour votre aide si vous avez une idée.
 
Yvan

Reply

Marsh Posté le 28-01-2004 à 11:41:33   

Reply

Marsh Posté le 28-01-2004 à 12:38:33    

Je précise que je peux obtenir la liste des dossiers à supprimer au moyen de la commande :
 
dir c:\mondossier\225* /s > toto
 
mais ensuite je ne sais pas comment exploiter l'information contenue dans toto pour qu'il détruise les dossiers trouvés.
 
A la limite si vous avez une idée avec un autre langage que batch je suis preneur aussi tant que c'est abordable pour un newbie.

Reply

Marsh Posté le 28-01-2004 à 12:42:14    

Dans les vieux DOS, Deltree servait à détruire les dossiers (et sous-dossiers) (mais je sais plus si devaient être vide avant, je croispas)

Reply

Marsh Posté le 28-01-2004 à 12:51:46    

Malheureusement je suis sous Win 2000 et deltree n'existe plus. En plus je ne veux pas lui faire détruire un dossier précis mais un ensemble de dossiers à chercher dans l'arborescence.

Reply

Marsh Posté le 28-01-2004 à 18:32:04    

J'avais pas remarqué (suis encore sous DOS 6.22).
Sous Win2k, help del semblerait (? option à ajouter) qu'on peut spécifier un nom de répertoire. A tester....
Je viens de tester avec répertoire juste créé et avec deux fichiers dedans. Ca marche une fois répondu Oui pour effacer.

Reply

Marsh Posté le 28-01-2004 à 18:51:25    

La commande del marche bien pour les dossiers mais seulement pour détruire un dossier précis et non un dossier défini de façon générique.
 
Par exemple si j'écris :
del C:\mondossier\225a
le programme détruit le dossier 225a, mais si j'écris
del C:\mondossier\225* il ne détruira pas C:\mondossier\225a et a fortiori il ne détruira pas non plus C:\mondossier\sousdossier\225b
 
alors que j'aurais voulu une commande qui détruise tous les dossier commençant par 225 quelle que soit la position dans l'arborescence.
 
Mais bon, peut-être que ce n'est pas possible et dans ce cas je continuerai à le faire à la main :(

Reply

Marsh Posté le 28-01-2004 à 19:38:20    

Y a peut-être moyen, peut-être via un fichier "liste" mais sais pas (encore) comment. Y a des fois des exemples sur le site de gestion "sophistiquée" en .bat . Semblerait donc qu'un nom générique de répertoire ne soit pas accepté.
 
Je ferais qq essais pr voir si je retrouve les liens vers sites d'infos (y a des trucs qu'on ignore quand on a pratiqué DOS de façon superficielle (à part %1 %2 Echo machin ...))

Reply

Marsh Posté le 28-01-2004 à 21:13:03    

Si en utilisant la commande  
dir c:\mondossier\225* /s /b (le B permet ne ne pas avoir toutes les fioritures de date, taille, etc..) on n'a que les chemins et noms, en QBASIC, on peut lancer des commandes DEL (faudra que je teste). Si libellé complet, ça doit aller, le pb est le nom générique.
 
Sinon, avec explorateur, chercher "225*.*", ctrl+A pr tout sélectionner, supprimer puis zou, plus rien.
 
Rq : sur mon W2k, deltree existe encore, il n'est pas dans l'aide help, faut faire deltree /?
Si on est ds le répertoire "maître", on peut faire  
for /D %f in (225*.*) do deltree %f  marche mais c'est pas récursif (/D pour directory, sinon que fichiers)
dir 225*.* /S | deltree marche pas car pas pipable, dommage
 
Ne sachant pas comment lire le contenu d'un fichier depuis batch, on n'avance pas...

Reply

Marsh Posté le 28-01-2004 à 21:18:24    

rd /s 255*  
 
?

Reply

Marsh Posté le 28-01-2004 à 21:44:11    

Je viens d'essayer mais il comprends pas... 225* ne trouve pas les 2251 2252 2253 ...
 
J'ai regardé sur http://www.microsoft.com/windows20 [...] ntcmds.htm , on peut, quand la commande le permet, lire le contenu d'un fichier pour action par < (comme sort)
mais deltree n'en veut pas (pb de paramètre, ..)
ni rmdir /s (dommage), le piping non plus
rmdir /s < fichier ou deltree < fichier pas bon.

Reply

Marsh Posté le 28-01-2004 à 21:44:11   

Reply

Marsh Posté le 28-01-2004 à 21:50:47    

carbon_14 a écrit :

Si en utilisant la commande  
dir c:\mondossier\225* /s /b (le B permet ne ne pas avoir toutes les fioritures de date, taille, etc..) on n'a que les chemins et noms, en QBASIC, on peut lancer des commandes DEL (faudra que je teste). Si libellé complet, ça doit aller, le pb est le nom générique.
 


 
Et en faisant  
 

Code :
  1. dir c:\mondossier\225* /s /b >> c:\listedir.txt


 
Ca génère un TXT avec la liste dedans, il fout des "RMDIR" devant chacun (copier/coller powaa) et l'enregistre en .bat [:mrbrelle]
 
Non?
 
 
EDIT: faire l'équivalent avec DEL /Q avant pour supprimer le contenu


Message édité par ObsydianKenobi le 28-01-2004 à 21:54:07

---------------
Long-range goals keep you from being frustrated by short-term failures. RIP VC
Reply

Marsh Posté le 29-01-2004 à 09:12:10    

Ca serait bien en "automatique" : commande lancée, action exécutée, fini.

Reply

Marsh Posté le 30-01-2004 à 10:07:07    

J'ai testé la commande suivante sur un de nos serveurs Window 2000 et elle fonctionne.
 


FOR /R %r IN ('DIR /A:D /S /B 225*') DO DEL /S /Q %r


---------------
Jean Pierre.
Reply

Marsh Posté le 31-01-2004 à 11:53:42    

aigles a écrit :

J'ai testé la commande suivante sur un de nos serveurs Window 2000 et elle fonctionne.
 


FOR /R %r IN ('DIR /A:D /S /B 225*') DO DEL /S /Q %r




 
[:obsydiankenobi] j'ai commencé à regarder avec un FOR, mais j'ai pas eu le courage de tester le DEL dedans [:mrbrelle]  :whistle:


---------------
Long-range goals keep you from being frustrated by short-term failures. RIP VC
Reply

Marsh Posté le 12-04-2004 à 19:14:36    

Je viens seulement de faire le test sur mon ordi perso sous XP (j'avais oublié d'activer la notification par email). Pour que ça marche il faut faire quelques modifications cosmétiques mais l'idée fonctionne. Le programme devient :
 

Code :
  1. dir /a:d /s /b D:\_Yvan\225* > toto
  2. for /f %%r in (toto) do rd %%r /q
  3. for %%r in (toto) do del %%r /s /q


 
Merci beaucoup pour votre aide et désolé de ma réponse tardive.
 
Yvan


Message édité par ydecreux le 12-04-2004 à 19:16:13
Reply

Marsh Posté le 28-04-2004 à 13:13:40    

je vois pas pourquoi tu n'utilise pas deltree a la place de ton script sous win2000
"deltree 225*" fonctionne tres bien et en tapant "deltree /?" tu auras toute les options desirées, de plus deltree tu le trouve partout, (disquette de demarrage win98 par exemple ou ici: http://gilles.ronsin.free.fr/fichi [...] LTREE.EXE) tu peux meme trouvé un equivalent sur le site de freedos (gratuit)
ciao!

Reply

Marsh Posté le 07-05-2004 à 11:04:50    

Le problème n'était pas de pouvoir détruire un dossier mais surtout de rechercher tous les dossiers 225* de l'arborescence, ce que deltree ne fait pas si on stipule juste deltree 225* (il faut lui donner l'adresse exacte du dossier à détruire). Merci toutefois pour la suggestion :) .

Reply

Marsh Posté le 07-05-2004 à 11:18:50    

ObsydianKenobi a écrit :

[:obsydiankenobi] j'ai commencé à regarder avec un FOR, mais j'ai pas eu le courage de tester le DEL dedans [:mrbrelle]  :whistle:


 
En fait tu as bien fait car il me semble que ces commandes DOS ne sont pas très portables. Sur un autre ordi avec win 2000 ma formule ne fonctionnait pas donc j'ai essayé l'autre et le temps de réagir j'ai perdu 100 Go de données :( . Je crois que je vais continuer à la main.

Reply

Marsh Posté le 07-05-2004 à 11:52:08    

Il ne faut pas oublier que sous Win9x c'est du DOS 7 alors que sous NT/2000/XP c'est juste une ligne de commande qui a une syntaxe proche du DOS.
Donc c'est "normal" qu'il y ait des différences (par ex "deltree" qui n'existe pas, mais où "del" possède de quoi supprimer des dossiers)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 17-05-2004 à 17:19:39    

En fait le programme ne marchait pas parce que j'utilisais la première des lignes de commande :

Code :
  1. for /f %%r in (toto) do rd /q


qui ne fonctionne qu'avec des dossiers vides (ce qui était le cas lors de mes tests). En fait il suffisait d'écrire :

Code :
  1. for /f %%r in (toto) do rd /s /q


Mes affirmations concernant la non-portabilité du DOS de win 2000 étaient donc infondées. Désolé.


Message édité par ydecreux le 17-05-2004 à 17:20:13
Reply

Marsh Posté le 30-05-2004 à 09:45:37    

yen a ils sont po compliqués !! lol
juste un rd /S /Q suffit de supprimer tous les répertoires récursivement

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed