Batch pour supprimer des dossiers portant tel nom

adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 - 9 mai 2023 à 01:04
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 - 12 mai 2023 à 15:02

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

12 réponses

PierrotLeFou
9 mai 2023 à 01:37

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é.

0

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.

0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
9 mai 2023 à 06:27

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"

)

0

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

0
brucine Messages postés 14341 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 avril 2024 1 818
9 mai 2023 à 07:42

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.

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 10
10 mai 2023 à 18:30

salut 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?

0
brucine Messages postés 14341 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 avril 2024 1 818
10 mai 2023 à 18:55

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

0
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 10
10 mai 2023 à 19:40

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

0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
10 mai 2023 à 19:51

Est-ce que tu exécutes le script par le biais d'une gpo machine ou bien d'une gpo utilisateur ?

0
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 10 > barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
10 mai 2023 à 19:54

je n'ai pas encore fait le test de la GPO pour le moment je teste juste les fichiers batch en execution manuelle. Mais en effet une fois que je lance cmd en tant qu'admin alors la commande icacls fonctionne bien. Une GPO va forcément utiliser le privilège le plus haut ?

0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024
10 mai 2023 à 20:19

une gpo machine oui, pas une gpo utilisateur

0
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 10
11 mai 2023 à 23:43

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é

0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
12 mai 2023 à 06:22

Au départ tu parlais de supprimer des dossiers inutiles, Desktop n'est pas ce que l'on peut appeler un dossier inutile.

Tu pourrais supprimer le contenu de Desktop au lieu de supprimer le dossier lui-même.

0
PierrotLeFou
12 mai 2023 à 01:12

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.

0
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 10
12 mai 2023 à 11:42

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 

0
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 10
12 mai 2023 à 11:48

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.

0

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/

0
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 10
12 mai 2023 à 15:02

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 

0