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)
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.
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:
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.
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 .
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.
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 .