[Batch] Créer une exception pour la commande DEL - effacer certains fichiers mais pas tous

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 :

DEL . - *.txt

Mais ça ne marche pas.

Auriez vous une idée?

Bonjour

essaie
attrib +r *.txt
del .
attrib -r .

Ah ? ok

je ne connais pas la commande ATTRIB, ça donnne quoi ?

Je vais tester ça demain je te donnerais des nouvelles.

Merci ) :clap:

Plus élégant et moins foireux je pense (pas testé): déplace les fichiers que tu veux conserver, dans un autre dossier, et fais la suppression.

lol Sans-Nom !

Je me doute bien que cette solution est plus pratique mais vois tu si je pose cette question précise c’est que je ne peut (ou ne veut) pas faire autrement.

Le but étant d’apprendre à faire cela pour pouvoir me débrouiller seul par la suite.

GCC:

Ok merci je sais maintenant à quoi sert la commande ATTRIB : à donner une attribution à un fichier. Exemple dans ce cas, avec la commande ATTRIB +r *.txt
tous les fichiers TXT de ce dossier passent en lecture seule.

Je vais tester pour voir si ça fonctionne. Encore merci pour cette piste.

Ca ne marche pas non plus… enfin pas totalement. Cela me servira à effacer les fichiers qui seront en lecture seule (et ça arrive de temps en temps).

En fait le problème c’est que j’ai aussi des dossiers en lecture seule et la commande ATTRIB ne modifie que les fichiers.

Existe t’il un moyen de changer la propriété des dossiers?

Du coup quand j’essaie d’effacer ces dossiers avec la commande RMDIR cela ne fonctionne pas vu qu’ils sont en lecture seule.

Bref je tourne un peu en rond :pt1cable:

et si tu enlève la ‘lecture seule’ sur les dossiers ??

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.

Je ne peut pas enlever la "Lecture seule" des dossiers à la main, puisque le contenu de ce dossier va changer tout les jours de la semaine et que la manipulation serait à refaire à chaque fois.

De plus comme ce n’est pas moi qui utilisera le batch en fin de compte, donc les utilisateurs ne seront pas quoi faire s’ils doivent “bidouiller” pour que cela fonctionne.

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 vous voyez ce qui cloche, je vous écoute :bounce:

Avec un répertoire temporaire C:\TEMP peut-être?

CD C:\DOSSIER
Rem - Je sauvegarde mes fichiers
COPY .TXT C:\TEMP
Rem - J’efface toute l’arborescence
ATTRIB +R * /S/D
RMDIR . /S/Q 2>NUL
Rem - Je restore mes fichiers
COPY C:\TEMP\
.TXT .

Oh punaise que tu es intelligent Michel35 ! (ou peut être que c’est moi qui suis un peu c**) :whistle: Quand on est parti dans une certaine logique c’est difficile d’en sortir parfois.

Je n’y avais même pas pensé, j’essaie ça de suite et je te dis si ça marche.

Ben voilà =)

Une affaire de réglée !

Ca marche à la perfection, merci à vous tous! :super:

Ne serait-il pas plus judicieux d’utiliser un MOVE à la place du COPY ?
Ce qui donnerait (nécessite peut-être encore 2/3 adaptations) :

CD C:\DOSSIER
Rem - Je sauvegarde mes fichiers
MOVE *.TXT C:\TEMP
Rem - J'efface toute l'arborescence
ATTRIB +R * /S/D
RMDIR . /S/Q 2>NUL
Rem - Je restore mes fichiers
MOVE C:\TEMP\*.TXT .

Genre c’était à peine ce que je proposais… t t t !

Oh pardon Sans_nom en relisant ton message je me rends compte que je l’avais mal compris. En effet c’était la solution que tu proposais :neutre:

Par contre je suis désolé de vous l’apprendre ce batch qui fonctionnait à merveille sur le pc de test ne marche pas sur le poste de “production”. :ouch:

C’est dû aux paramêtres de sécurité sûrement. En effet pour des raisons pratiques l’utilisateur devant utiliser ce batch (en l’occurence “PROF”) n’a pas les droits de suppression ni de modification sur le dossier à nettoyer (juste lecture, écriture et exécution).

Je procède donc comme suit pour contourner ce problème:

echo
REM - Je me connecte avec un utilisateur qui a les droits d’administrateur
net use T: \\poste\dossier /persistent:NO password /user:domaine\utilisateur
T:
REM - Je copie les liens à garder
COPY HDD*.lnk C:\TEMP
REM - ici j’enlève tout les attributs ( +R ou -R ?)
ATTRIB -R -A -H -S * /S /D
REM - a quoi correspond le 2>NUL ?
RMDIR . /S/Q 2>NUL
REM - je déplace mes liens (pour faire plaisir à Sans-Nom et Raynor)
REM - ici j’obtiens un message d’erreur: impossible de copié HDD*.lnk
MOVE C:\TEMP\HDD*.lnk
REM - je déconnecte le lecteur réseau
NET USE T: /DELETE
EXIT

Comme indiqué dans les remarques sur le code, je ne comprends pas ligne suivante dans le code proposé: [quote=""]
ATTRIB +R * /S /D
[/quote]

Pourquoi +R ? Cela applique la lecture seule sur les dossiers non? Quel en est le but? Je pensais plutot devoir enlever les attributs, donc utiliser ATTRIB -R.

De toute façon si ça ne fonctionne pas avant les vacances je crois que je vais laisser tomber. Je ne peut pas me permettre de perdre trop de temps là dessus.

En tout cas, merci à tous pour vos réponses et votre aide.

Plus personne n’a d’idée? Vous aussi êtes désespérés ? :frowning:

Effectivement, c’est ATTRIB -R (enlever l’attribut ReadOnly) qu’il faut utiliser.
En faisant ATTRIB -R -A -H -S, tu positionnes les attributs ReadOnly mais aussi Archive, Caché et Système, ce qui ne sert à rien (à éviter même).

Le 2>NUL signifie “redirection de la sortie erreur vers null”, cela évite l’affichage d’un message d’erreur consécutif à l’utilisation de la cde RMDIR.

Et enfin, la syntaxe de la commande MOVE (taper MOVE /?): MOVE <fichier origine> <repertoire distination>
Il te manque donc un point "." (càd le répertoire courrant) à la fin de ta commande
MOVE C:\TEMP\HDD*.lnk .