Batch pour supprimer des dossiers portant tel nom
adgm1 Messages postés 289 Date d'inscription Statut Membre Dernière intervention -
bonjour
je cherche à supprimer des dossiers qui portent un nom spécifique. Je voudrais rechercher dans un premiers temps tous les dossiers qui se nome "toto", "bibi"... puis les supprimer.
mon idée est d'utiliser la fonction IF EXIST mais je ne sais pas comment indiquer qu'il faut chercher dans les sous dossiers également. Car le dosser toto peut se trouver à différents endroits au sein du répertoire cible.
par exemple if exist "contact" rmdir "contact", if exist "liens" rmdir "liens etc...
l'objectif est de virer certains dossiers inutiles dans les profils utilisateurs. Je le lancerai ensuite en tache planifiée tous les x jours pour qu'à chaque nouveau profil les dossiers inutiles types contact, parties enregistrées, favoris.... disparaissent
merci
- Batch pour supprimer des dossiers portant tel nom
- Supprimer rond bleu whatsapp - Guide
- Supprimer page word - Guide
- Impossible de supprimer un dossier - Guide
- Fichier batch - Guide
- Supprimer pub youtube - Accueil - Streaming
12 réponses
Tu as une façon de connaître tous les "objets" dans le répertoire courant.
Sais-tu comment savoir si l'objet est un dossier / répertoire?
Si c'est un dossier, tu vérifies si c'est le ou les noms cherchés.
Si oui, tu le supprimes (et ses sous-dossiers de façon récursive).
Si ce n'est pas un des noms cherchés, tu rappelles ton script de façon récursive en donnant le bon paramètre ou en faisant le cd approprié.
Je pense que la commande find pourrait faire ce que tu souhaites:
find . -name toto -or -name bibi ... -type d -exec rm -rf {}\;
Le '.' veut dire le dossier courant. On le remplace par le nom du dossier désiré.
S'il y a des espaces ou caractère spéciaux dans le nom, on entoure avec des " ", comme "Parties enregistrees".
Si tu ne veux supprimer que les dossiers vides, tu pourrais ajouter l'option -empty et remplacer le "rm -rf" par "rmdir"
Le \ avant le ; de la fin est nécessaire.
Bonjour,
Tu pourrais faire un truc du genre :
dir /b /s /ad "répertoire cible" > "%TMP%\liste_dossiers.txt" for /f "delims=" %%A in ('findstr /i "toto bibi" "%TMP%\liste_dossiers.txt"') do ( rmdir /s /q "%%~A" )
Je n'avais pas réalisé qu'il s'agit de autoit, Le rmdir m'a induit en erreur.
En effet, rmdir n'existe pas sous cmd.
@barnabe0057:
Ce script pourrait sans doute éliminer les dossiers du genre "toto" dans le dossier courant, mais sans doute pas dans un de ses sous-dossiers?
J'ai trouvé ceci:
https://forum.hardware.fr/hfr/Programmation/Shell-Batch/dos-for-imbriquees-sujet_92855_1.htm
mais comme il est mentionné, l'expansion retardée des variables est compliquée.
Ce serait moins compliqué d'écrire un autre script qui vérifie si le nom est dans la liste et retourne un statut en accord.
Par exemple:
for /f "tokens=*" %%p in ('dir /ad /b') do (
; appel d'un autre script qui retourne statut si fichier dans une liste
; si statut 0 (
rd /S /Q %%p
) else (
; appel récursif
)
)
Bonjour,
On ne sait pas s'il s'agit de Autoit ou de Batch, le plus souvent c'est tout de même le dernier où la commande RMDIR existe bien mais est le plus souvent résumée à RD.
Le commutateur /s dans DIR prescrit bien de chercher dans les sous-dossiers de "Répertoire Cible"; rien n'exclut que ce dernier soit la racine d'une partition sinon que la recherche va durer des lustres.
Les "subtilités" de l'expansion retardée et de l'imbrication FOR peuvent souvent être contournées par l'appel à une sous-routine CALL, moins élégant mais plus facile à écrire.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionsalut merci pour vos reponse
avec le script de barnabe0057 je parviens à tout supprimer sauf "groups" qui me met accès refusé. Dans les propriété et sécurité du dossier c'est indiqué "vous devez disposer d'autorisation d'acces en lecture pour afficher les propriétés...".
J'ai tenté d'ajouter à mon script la commande suivante pour donner des droits augmenté mais ca donne rien
takeown /f "D:\...\groups" /a /r /d o
icacls "D:\...\groups" /setowner "Administrateurs" /T /C
une idée pour permettre la suppression du dossier groupes?
Bonjour,
Tu l'exécutes en administrateur, ton script, et il "appartient" à qui, ce dossier?
Sur la syntaxe, tu es sûr que la syntaxe takeown est O et pas Y? Les guillemets ne sont pas utiles sauf si caractère spécial dans le chemin, pourquoi /a au lieu de t’attribuer les droits à toi-même?
Sur icacls, l'utilisateur ne comporte pas de guillemets et là aussi, pourquoi vouloir s'approprier plutôt que se conférer des droits via /grant; attention dans tous les cas à l'application effective des permissions (dossier lui-même et sous-dossiers), voir là les 2 premières lignes d'exemples:
https://ss64.com/nt/icacls.html
cest un dossier de partage entre plusieurs utilisateurs. Le script je l'execute depouis le controleur de domaine donc a priori cest admin oui. En tout cas pas de pb a ce niveau pour supprimer tous les autres dossiers
pour takeown cest bien O pour Oui et non y pour Yes. Le /a je sais pas bien s'il a un intérêt mais faudrait pouvoir que mon script s'execte correctement à intervalle régulier donc je dirait qu'il faut etre system ou admin du domaine
voila ce que j'ai quand j'essaye les commande pour augmenter les droits:
takeown /f "D:\...\groups" /a /r /d o
Erreur : l’utilisateur actuellement connecté
ne dispose pas de privilèges d’administrateur
icacls "D:\...\groups" /setowner Administrateurs /T /C
D:\...\groups: Accès refusé.
D:\...\groups\*: Accès refusé.
0 fichiers correctement traités ; échec du traitement de 2 fichiers
icacls "D:\...\groups" /grant:r Administrateurs:(OI)(CI)F /T
D:\...\groups: Accès refusé.
0 fichiers correctement traités ; échec du traitement de 1 fichiers
cest ok finalement lors du lancement via tache planifiée les commandes sont bien executées. un droit supérieur doit donc etre appliqué par rapport a l'éxecution manuelle
J'ai par contre le dossier desktop qui revient sans arret quand la session utilisateur est connecté, sans doute parce qu'il faut que l'emplacement du bureau se trouve quelque part. Je vais essayer de le déporter sur un lecteur partagé
En principe sur Windows, il y a toujours un dossier Desktop associé à chaque utilisateur:
C:\Users\<identificateur_de_l'utilisateur>\Desktop
C'est vrai pour celui qui émet la commande et pour ceux pour lesquels tu fais le ménage.
L'idée c'est plutôt de nettoyer l'explorateur de fichier pour ne laisser que l'essentiel. Et le bureau n'est pas à manipuler par les utilisateurs dans notre cas. C'est l'admin qui impose tel raccourci sur les bureaux. Donc si le bureau est accessible on perd le côté non personnalisable du bureau
En fait pour le pb du Bureau j'ai expliqué mon idée sur un autre post qui n'a pas obtenu de réponse ici
Mais ca me parait jouable d'utiliser des GPO pour déporter les bureaux des utilisateurs vers un lecteurs partagé pour que l'admin soit le seul manipulateur des icones du bureau.
Je ne sais pas si c'est ceci que tu cherches:
https://www.pcastuces.com/pratique/windows/autorisations_fichier/page2.htm
ou en mode commande:
https://www.malekal.com/comment-utiliser-icacls-pour-voir-et-modifier-les-autorisations-de-fichiers-et-dossiers/
Dans un second temps oui il faudra peut etre que je modifie des autorisation d'écriture /lecture pour que personne ne puisse modifier le bureau. Mais je compte aussi cacher le lecteur mappé qui regrouperait les raccourcis du bureau.
je vais deja me pencher sur la déportation du dossier bureau de chaque utilisateur vers ce lecteur