Suppression Recursive et RDMIR, FOR et DIR [RESOLU]

Suppression Recursive et RDMIR, FOR et DIR [RESOLU] - Shell/Batch - Programmation

Marsh Posté le 27-08-2004 à 10:16:14    

Bonjour a tous.
La recherche est momentanément indisponible, je me suis donc tapé les sujets des 13 pages de la rubrique a la recherche d'un titre correspondant a ce que je recherche. Une remarque les titres ne sont pas tres tres parlant :)
 
Je souhaiterais supprimé recursivement le contenu d'un répertoire sans le supprimer lui même via un fichier .bat
Le répertoire en question ne contient pas de fichier à la racine, uniquement des répertoires.
 
La commande rmdir (ou rd) permet de faire ça presque parfaitement, seul problème le répertoire racine est également supprimé :(
 

Code :
  1. C:\>help rmdir
  2. Supprime un répertoire.
  3. RMDIR [/S] [/Q] [lecteur:]chemin
  4. RD [/S] [/Q] [lecteur:]chemin
  5.     /S      Supprime tous les répertoires et les fichiers dans le
  6.             répertoire spécifié en plus du répertoire lui-même.
  7.             Utilisé pour supprimer une arborescence.
  8.     /Q      Mode silencieux, ne demande pas de confirmation pour supprimer
  9.             une arborescence de répertoires avec /S.


 
En attendant je fais avec, puis recrée le répertoire derrière, filou mais pas très propre :)
 
J'essaye (après un help for et un help dir) de parcourir le répertoire et d'appliquer la commande Rmdir sur les sous répertoires.

Code :
  1. for %%i IN (`dir repertoireEnQuestion \b`) DO rmdir \q \s %%i
  2. note : ne fonctionne pas :(


 
Je voudrais donc un coup de main pour une syntaxe correcte, la commande dir ne passe pas :/
 
Ou alors si vous avez une autre idée .
 
Dans l'attente,
 
idjiwa.


Message édité par #SubZero le 27-08-2004 à 17:47:28
Reply

Marsh Posté le 27-08-2004 à 10:16:14   

Reply

Marsh Posté le 27-08-2004 à 10:18:06    

4pc a écrit :

Une remarque les titres ne sont pas tres tres parlant :)


c'est pourtant pas faute de gueuler après ceux qui mettent des titres bidons :/

Reply

Marsh Posté le 27-08-2004 à 10:19:55    

Ouaip, je pense que ce sont les mêmes qui n'ont pas encore pris l'habitude de taper leurs mots clés dans les forums :) Mais ca vient au bout d'un moment.
Fo laisser venir, en attendant, une idée ?

Reply

Marsh Posté le 27-08-2004 à 10:30:22    

une solution intermédiaire,  
 

Code :
  1. dir repertoireEnQuestion /b > fichier.txt
  2. for /F %%i IN (fichier.txt) DO rmdir \Q\S repertoireEnQuestion\%%i


 
Mais la création d'un fichier, c'est couteux (et donc pas optimal)...
 
Une suggestion ?
 
idjiwa.

Reply

Marsh Posté le 27-08-2004 à 13:05:27    

c le genre de méthode que j'aurais utilisé et je ne trouve pas ca lourd de passer par la création d'un txt de qq ko...

Reply

Marsh Posté le 27-08-2004 à 15:00:57    

Merci pour ton commentaire !
 
Non, je suis d'accord c'est pas excessivement couteux, mais une écriture sur un fichier est toujours plus couteuse qu'un accès direct...non ?  
Le coup de la redirection aurait été préférable, mais je n'ai pas reussi à faire passer le résultat de la commande "dir" comme 'ensemble' pour le for. :)
 
Et pourtant :  

Code :
  1. FOR /F ["options"] %variable IN (`commande`) DO commande [paramètres]


 
Ca devrait pouvoir se faire ... :??:


Message édité par #SubZero le 27-08-2004 à 15:04:04
Reply

Marsh Posté le 27-08-2004 à 15:06:45    

del /s permet de faire ce que tu veux. testé
 
ça supprimer les fichiers, sans la structure des répertoires


Message édité par jagstang le 27-08-2004 à 15:07:34
Reply

Marsh Posté le 27-08-2004 à 15:35:21    

Citation :

del /s permet de faire ce que tu veux. testé  
ça supprimer les fichiers, sans la structure des répertoires

:??: Ce n'est pas ce que je veux !
relis bien plus haut attentivement, je ne veux garder QUE le premier répertoire, tout le reste zouuu..
En gros y a deux solutions que je propose par rapport a ce ti probleme et j'attends des meilleurs solutions si possible.
 
Merci pour ton post.
 
idjiwa.


Message édité par #SubZero le 27-08-2004 à 15:35:38
Reply

Marsh Posté le 27-08-2004 à 15:42:45    

sinon y'a deltree. je vois pas trop ou est le problème...  
 
si tu veux supprimer tout ce qu'il y a dans C:\temp\truc sans supprimer truc tu fais del C:\temp\truc\*.* pis voilà.  
 
je crois que vous allez chercher un peu compliqué là

Reply

Marsh Posté le 27-08-2004 à 15:52:53    

non jag tu n'as pas vu que c les répertoires qu'il veut suppr
or del ou erase ca suppr que des fichiers...

Reply

Marsh Posté le 27-08-2004 à 15:52:53   

Reply

Marsh Posté le 27-08-2004 à 15:55:45    

ok. alors je vois que deltree

Reply

Marsh Posté le 27-08-2004 à 15:56:36    

Citation :

sinon y'a deltree. je vois pas trop ou est le problème...  
si tu veux supprimer tout ce qu'il y a dans C:\temp\truc sans supprimer truc tu fais del C:\temp\truc\*.* pis voilà.  
je crois que vous allez chercher un peu compliqué là


Prend la peine de lire ce qui est avant s'il te plait. :)
 
Concernant deltree il n'existe plus sous windowsXP (sauf si tu le rajoute).
L'equivalent est la commande rd (ou rmdir).
 
Concernant le del c:\truc\*.*, essaye donc en mettant un répertoire dans truc avant d'executer ta commande, tu verras que le répertoire ne bouge pas :)
Et pour cause , del ne concerne que les fichiers et sans d'autres options comme \s, del ne concerne que les fichiers à la racine du répertoire précisé (dans ton cas, truc).
C'est bien ce que te dis DOD_edge juste au dessus.
 
idjiwa.

Reply

Marsh Posté le 27-08-2004 à 16:00:55    

Et si tu fais ca:
 
cd path
rd rep
mkdir rep
 
ou encore
rd path\rep
mkdir path\rep
 
en fait je supprime tout et je crée ton répertoire c pareil que de le vider pour toi, non?

Reply

Marsh Posté le 27-08-2004 à 16:05:08    

Citation :

En attendant je fais avec, puis recrée le répertoire derrière, filou mais pas très propre  


C'est ce que je mets dans mon premier post :)
C'etait la premiere solution (bonne idée donc ;) ), mais apres j'ai trouvé mieux, regarde dans les autres posts.
 
idjiwa.


Message édité par #SubZero le 27-08-2004 à 16:05:45
Reply

Marsh Posté le 27-08-2004 à 16:10:24    

bah franchement c plus rapide que de lister tous les rep et de tous les supprimer ... pour moi y a pas photo

Reply

Marsh Posté le 27-08-2004 à 16:11:58    

Oui mais imagine, tu as mis deux heures a placer tes droits sur le répertoire parent... faut que tu le refasses :)
Mais je suis d'accord avec toi, si tu me trouves le moyen de passer au for le résultat du dir c'est parfait c'est ce qu'il faut... il n'y a dans ce cas plus d'écriture sur fichier !
 
Dans cette solution, ce n'est pas le dir qui est couteux, mais la redirection !

Code :
  1. dir repertoireEnQuestion /b > fichier.txt
  2.   for /F %%i IN (fichier.txt) DO rmdir \Q\S repertoireEnQuestion\%%i



Message édité par #SubZero le 27-08-2004 à 16:14:59
Reply

Marsh Posté le 27-08-2004 à 16:50:44    

g trouvé la syntaxe qui accèpte le dir dans le for mais par contre mon rmdir ne marche pas je c pas pkoi:
 
for /F "tokens=*" %%i IN ('dir /a:d /b c:\scanip\') DO (
rd /Q /S c:\scanip\%%i
)
je suis sur que ce code lance bien la commande que tu veux
mais par contre chez moi la commande rmdir refuse de supprimer un répertoire... je c pas pkoi...

Reply

Marsh Posté le 27-08-2004 à 16:51:39    

for /F "tokens=*" %%i IN ('dir /a: d /b c:\scanip\') DO (
rd /Q /S c:\scanip\%%i
)
sans espace entre a: et d c pour ce smyley de Me...

Reply

Marsh Posté le 27-08-2004 à 16:52:40    

et scanip c le rép en question désolé g laisser mon rep de test

Reply

Marsh Posté le 27-08-2004 à 17:22:33    

C'est exactement ce que je veux .. mais y a t'il une precision pour la syntaxe ?
Ca ne marche pas pour moi :/
Enfin quand je dis que ca ne marche pas, l'évaluation se fait bien, c'est à dire qu'il lance bien le rd (ou rmdir pareil) /q /s sur le repertoire (les bons) mais me sort "fichiers spécifiés introuvables" derrière.. toi aussi ? Bizarre je ne vois pas ou il cherche des fichiers... :(

Code :
  1. for /F "tokens=*" %%i IN ('dir /a:d /b root\') DO rmdir /Q /S root\%%i

Le /a:d n'est pas nécessaire dans mon cas car c'est un répertoire qui ne contient pas de fichier a la racine. Un détail.


Message édité par #SubZero le 27-08-2004 à 17:29:06
Reply

Marsh Posté le 27-08-2004 à 17:42:57    

oki g trouvé
ca ne marche que si t nom de dossier n'ont pas d'espace  
exemple crée c:\test et fait rd c:\test
ca marche  
or crée c:\te st et fait rd c:\te st
la il te met l'ereur fichier introuvable
donc ca marche que si t fichier on tpas d'espce dans leur nom
 
for /F "tokens=*" %%i IN ('dir /a:d /b path') DO (
rd /Q /S path\%%i
)
je cherche la manip pour les espaces on doit pouvoir y arriver...

Reply

Marsh Posté le 27-08-2004 à 17:43:49    

en mettant des guillemets ! C'est bon ca marche !
NIKEL
merci DOD, ca le fait ... et c'est moins couteux que l'écriture dans un fichier ;)

Code :
  1. for /F "tokens=*" %%i IN ('dir /a:d /b root') DO rmdir /S /Q root\"%%i"


Message édité par #SubZero le 27-08-2004 à 17:46:56
Reply

Marsh Posté le 27-08-2004 à 17:53:13    

oki c cool merci pour les "" j'y avais pas encore pensé...

Reply

Marsh Posté le 27-08-2004 à 17:54:25    

sinon supprimer le contenu de root c pas un peu brutal?

Reply

Marsh Posté le 27-08-2004 à 17:56:33    

C'etait pour l'exemple .. je ne compte pas l'utiliser sur ce répertoire :)

Reply

Marsh Posté le 22-02-2005 à 17:12:49    

[quote=833779,0,1,80550]FOR /F ["options"] %variable IN (`commande`) DO commande [paramètres][/quote]
Je cherche la liste de ces options; je cherche à faire la même chose mais avec les fichiers qui ont été modifiés à une certaine date (il y a plus d'un mois).


Message édité par ludolitaliano le 22-02-2005 à 17:13:34
Reply

Marsh Posté le 03-05-2013 à 22:45:59    

Je me permet de déterrer ça parce que je chercher à faire quelque chose de similaire.  
 
Bonjour d'abord...
 
J'ai un dossier qui contient plusieurs sous dossiers contenant chacun 1 dossier identique que je souhaite supprimer ainsi que des fichiers à conserver.
 
J'ai essayé la commande cité plus haut. (adaptée bien sur) mais ça ne fonctionne pas, de plus, je ne comprends pas ce que je fais.
 
J'ai compris les grandes lignes de la commande FOR IN et DO  
Je vois bien ce que je dois faire après le IN (grosso modo) et le DO mais je ne comprends pas du tout le début... le FOR...
 
Quelqu'un pourrait m'expliquer ça ? et éventuellement m'aider à créer ma commande pour supprimer ce dossier ?
 
Merci !

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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