[Batch] Créer une exception pour la commande DEL

Créer une exception pour la commande DEL [Batch] - Divers - Programmation

Marsh Posté le 18-12-2006 à 15:16:04    

Bonjour tout le monde =)
 
Je cherche à créer un fichier batch pour effacer tout le contenu d'un dossier SAUF certains types de fichier. (exemple: j'efface tout les fichiers sauf les .txt)
 
j'ai la commande :
 
 [B]DEL *.* - *.txt[/B]
 
Mais ça ne marche pas.
 
Auriez vous une idée?

Reply

Marsh Posté le 18-12-2006 à 15:16:04   

Reply

Marsh Posté le 19-12-2006 à 10:56:50    

le "-" dans la commande del ne concerne que les attributs que tu veux nier, par exemple :

 

del *.* /a-A (qui ici ne supprimera pas les fichiers "ready for archiving" )

 

Je ne pense pas qu'elle contienne un switch pour effectuer quelque autre type d'exclusion.

 

En revanche, si tu veux pas te casser la tête avec un script VBS ou autre pour réaliser ce que tu cherches à faire, tu pourrais construire un petit fichier batch qui fait ceci :

 

1. Met tous tes fichiers à exclure en read-only (en supposant que dans ton répertoire tu n'aies pas d'autres fichiers read-only)
2. Supprime tous les autres fichiers
3. Remet les fichiers read-only en non-read-only.

 

Exemple :

Code :
  1. cd C:\tonrepertoire
  2. attrib *.txt +r
  3. del *.* /a-R /Q
  4. attrib *.txt -r
 

(le /q c'est pour le "quiet mode" pour ne pas te demander de confirmation)

 

Voilà, ce n'est certes pas la solution la plus élégante, mais la plus simple à mettre en marche.


Message édité par ZeBix le 19-12-2006 à 11:04:22
Reply

Marsh Posté le 19-12-2006 à 13:42:58    

Merci Zebix pour ta réponse (surtout pour m'avoir filé une explication et pas seulement le code  :)  )
 
Ce qui me fait plaisir de voir que je suis arrivé à la même conclusion que toi. Cela fonctionne sauf que...
 
 Le contenu de mon dossier à vider est assez éclectique, on y trouve des fichiers simples (txt, doc, dat, gif), des fichiers plus sensibles (exe, reg, ini, dll), mais surtout des sous-dossiers.
 
Le problème étant que la commande ATTRIB ne permet pas de changer les propriétés des dossiers. Pour l'instant je me débrouille avec ça:  
 
cd C:\dossier
!-- j'enlève la propriété "Lecture seule" à tout les fichiers --!
attrib -r *.* /S /D
!-- je remets la propriété "Lecture seule" sur les fichiers que je veux conserver --!
!-- Auparavant j'ai rajouté le préfixe HDD à tous les fichiers que je veux conserver --!
attrib +r HDD*.txt /S /D
!-- j'efface tous les fichiers (sauf ceux en "Lecture seule" --!
del *.* /S /Q
!-- j'enlève la propriété "Lecture seule" aux fichiers restants --!
attrib -r HDD*.txt  
!-- j'efface les dossiers et répertoires présents --!
rmdir /s
 
Tout fonctionne sauf la dernière commande : rmdir /s
Je ne sais pas pourquoi mais apparement je dois mal écrire cette commande, pourtant j'ai essayé différents attributs mais rien n'y fait.
 
Si tu vous se qui cloche, je t'écoute  :bounce:


Message édité par SV_LVH le 19-12-2006 à 13:45:11
Reply

Marsh Posté le 19-12-2006 à 14:05:03    

Citation :

Le problème étant que la commande ATTRIB ne permet pas de changer les propriétés des dossiers.

 

ben si justement le switch /D que tu mets dans ton premier et deuxième attrib dans ton exemple, cela permet de changer la propriété des dossiers !

 

hehe alors voilà :

 

attrib -r HDD*.txt /S /D

 

(tu n'as forcément pas de répertoire concerné par le paramètre "HDD*.txt" mais ce n'est pas un problème !)

 

De plus, je ne comprends pas très bien ce que tu fais ... comment veux-tu supprimer des répertoires qui contiennent encore tes fichiers HDD*.txt ?

 

Autre chose : dans la syntaxe de rd (ou rmdir) tu dois spécifier le répertoire concerné. Donc tu remontes d'un cran (dans ton exemple : sur C:\) et tu tapes :
rd dossier /S

 

Mais bien évidemment cela va supprimer absolument tout le contenu de dossier, qu'il y ait des fichiers read only ou non dedans ...

 

Je pense que la solution est soit ailleurs qu'avec rd, ou alors en déplaçant tes fichiers d'abord

 


Message édité par ZeBix le 19-12-2006 à 14:05:17
Reply

Sujets relatifs:

Leave a Replay

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