Supprimer des fichiers dans chaque profil utilisateur

adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 - 9 juin 2023 à 02:28
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 - 9 juin 2023 à 10:50

bonjour

je cherche un moyen de supprimer les repertoire de menu demarrer issus de chaque profil utilisateur

le chemin est le suivant C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs

en gros pour chaque utilisateur il faudrait supprimer tous les fichiers et dossier de c:\...\programs donc le %usernam% doit changer selon les nom.prenom des utilisateurs. Cette commande ira ensuite se lancer par gpo à chaque démarrage pour virer le contenu à la création d'un nouvel utilisateur.

J'ai la commande pour le faire pour un profil donné 

set folder="C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs"
cd /d %folder%
for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)

comment aller chercher les cible sur chacun des dossiers des utilisateurs?
 

A voir également:

2 réponses

Ce que tu veux est la liste des utilisateurs?
En faisant un  dir /b C:\Users  tu les aurais ... mais avec sans doute autre chose.
Pourquoi ne pas utiliser  rd /S / Q %%i pour tout virer?

Je te suggère de placer le code mentionné dans un fichier *.bat et de l'appeler à partir d'un autre, pour éviter les problèmes d'expansion retardée.

0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817
9 juin 2023 à 08:41

Bonjour,

Juste quelques remarques en passant.

%Appdata% suffit à représenter C:\Users\%username%\AppData\Roaming.
Le commutateur /S de DEL n'est sans doute pas nécessaire: la commande RMDIR /S détruit tous les dossiers et les fichiers qu'ils contiennent, et DEL ne va donc viser que des fichiers isolés à la racine; il est par contre possible qu'on se fasse planter par le fichier desktop.ini, rajouter /F?

Il ne suffit pas d'exécuter une telle commande seulement à la création d'un nouvel utilisateur: Windows risque fort de nous ressusciter le menu à chaque mise à jour.

Pour rajouter à nos malheurs, une partie du contenu de ce menu (raccourcis de programmes, par exemple Word) se trouve ailleurs: C:\ProgramData\Microsoft\Windows\Start Menu\Programs et cela n'affecte pas les applications (dont l'affichage se dissimule par un paramètre Windows, mais il suffit sans doute dans ces conditions de mettre en place un menu démarrer vierge pour tous les nouveaux utilisateurs via PowerShell et une GPO):
https://www.it-connect.fr/windows-10-deployer-un-menu-demarrer-personnalise/

La commande dir /b C:\Users ramène bien tous les utilisateurs sauf Public (qui n'a pas de menu démarrer et qu'on peut de toute façon exclure par une conditionnelle) mais incluant Default qui en principe ne sert pas et même remarque.

Le problème de l'expansion retardée ou pas va se résoudre de manière conventionnelle sans qu'il soit besoin d'appeler un bat auxiliaire, soit en bouclant la condition FOR de recherche des utilisateurs sur une variable à expansion retardée, soit en appelant par CALL la routine de suppression à la sortie de cette boucle.

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

Merci pour vos réponse. 

J'avais en effet bien vu l'autre répertoire qui injecte des raccourcis au menu démarrer . L idées sera aussi de supprimer le contenu de C:\ProgramData\Microsoft\Windows\Start Menu\Programs

Pour préciser le pourquoi de cette manip. Si j'active la gpo "masquer les programmes communs du menu démarrer" alors je perds en même temps les raccourcis communs du bureau. Disparition de c:\user\public\desktop. Or j'en ai besoin pour me bureaux personnalisé.

Pas de distinction entre masquer les raccourcis communs du menu démarrer et masquer les raccourcis communs du bureau!! Étonnant. Ou alors il existe des clés de registre qui pourrait dissocier les 2.

D'où ma seule option de supprimer manuellement tous les contenus de programmes dans appdata et programdata.

Pas sur d'avoir compris le pb d expansion retardé. Je présume que c'est le fait que des raccourcis peuvent venir s ajouter plus tard.  Je vais essayé avec les propositions

0
brucine Messages postés 14333 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 avril 2024 1 817
9 juin 2023 à 10:50

L'expansion retardée résulte de la lecture d'une boucle FOR: si je la mets en oeuvre pour chercher tous les utilisateurs d'un PC, la valeur prise sera seulement la dernière lue par cette boucle FOR.

Comme ce que je souhaite est que la suppression des programmes s'applique à chaque utilisateur, il faut soit que la variable qui en résulte soit à expansion retardée:

setlocal enabledelayed expansion
où dans le traitement qui suit cette variable est appelée par !var! et non pas %var%

soit que j'appelle à la sortie de cette première boucle une étiquette par CALL :TRAITEMENT
Ma routine de suppression écrite dans l'étiquette :TRAITEMENT sera ainsi appelée (cette fois-ci en tant que variable "habituelle" %var%) à chaque fois que la valeur de la variable (nom de l’utilisateur) change dans la première boucle.

Un script comme suit par exemple va renuméroter tous les fichiers jpg du dossier source à partir de 1000:

 

CD /D E:\mondossier
SET COUNT=1000
FOR /F "delims=" %%a in ('dir /b E:\mondossier\*.jpg') DO SET FILE=%%~na & CALL :PROCESS

:PROCESS
SET /A "COUNT=COUNT+1"
SET FILE=%FILE:~0,-1%
SET FILE=%FILE%.jpg
REN "%FILE%" "%COUNT%_%FILE%"
0