Cacher tous les fichiers/dossiers des sous repertoire

adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 - 8 mars 2024 à 13:47
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 - 9 mars 2024 à 19:59

Bonjour,

je cherche un script qui lorsque je le place dans un repertoire cache tous les dossier et fichiers contenu dans les sous repertoires. Par ex je place le .bat dans le repertoire X qui comprend les sous repertoires A B C D. en lançant le script le contenu de A B C D devient entièrement constitué de fichier/dossiers cachés, mais chacun des dossiers A B C D reste visible.

Pour le moment je n'ai reussi qu'a le faire en nommant le dossier en question mais une fonction boucle for doit pouvoir réaliser ce que je souhaite

attrib +h /s /d dossierA\*.*
attrib +h /s /d dossierB\*.*
attrib +h /s /d dossierC\*.*

cela est contraignant car je dois a chaque fois modifier le nom des sous repertoire.

Par ailleurs je souhaite pouvoir par la suite faire la commande inverse c'est à dire tout rendre visible les dossiers/fichiers mais avec des exceptions de certains dossiers. Comment faire cela?

par ex dans le dossier A à l'origine j'ai déjà 2 sous repertoire toto et baba qui étaient cachés à l'origine et quand je rend visible à nouveau les fichiers je souhaite quand même que les dossiers toto et baba redeviennent cachés.
Windows / Chrome 121.0.0.0

A voir également:

8 réponses

brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 784
8 mars 2024 à 15:20

Bonjour,

J'affiche tous les sous-dossiers de mon bureau et seulement eux en écrivant:
 

set repertoire=C:\Users\brucine\Desktop\
for /f "delims= " %%a In ('dir /ad/b/s "%repertoire%"') Do (
echo %%a
)
pause
 Je dois donc tenter quelque chose du style:

set repertoire=C:\Users\brucine\Desktop\
for /f "delims= " %%a In ('dir /ad/b/s "%repertoire%"') Do (
SET subdir=%%a & CALL :PROCESS
)
pause
GOTO EOF

:PROCESS
attrib +h /s /d %subdir%\*.*
exit /b

:EOF

Dans l'autre sens, soit je fais un deuxième batch avec -h, soit je rajoute une sentence CHOICE cacher montrer où les choix correspondants sont une variable prenant la valeur de +h ou -h, et je remplace si la commande attrib l'accepte +h par cette variable.

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

merci . Pour le moment j'obtiens l'erreur "format incorrect" il semble qu'un espace vient s'intercaler dans le chemin et donc il ne trouve pas les dossier ou fichier concernés. Après \web dans l'exemple il y a un espace avant le \*.*

D:\KoXoDATA\ELEVES\CL-PAS>attrib +h /s /d D:\KoXoDATA\ELEVES\CL-PAS\john.cidry\CONFIG\web \*.*
Format incorrect du paramètre -

0
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 784
9 mars 2024 à 13:30

ça ne concerne pas le script (je ne l'ai pas exécuté mais j'ai vérifié que le nom de variable ne générait pas d'espace intempestif comme c'est le cas avec certaines commandes) mais une exécution à la ligne de commande.

Pour autant, cet espace n'est pas venu tout seul si tu as copié un chemin sur la ligne de commande, il faut faire "marche arrière" pour le supprimer (ou plus facilement le copier dans un fichier texte temporaire qu'on corrige éventuellement avant de copier à la ligne de commande).

En dehors de la trop grande longueur éventuelle du chemin incluant les noms de fichiers, pas sûr que la commande digère correctement le caractère spécial (point) dans un nom de dossier ou interprète correctement le tiret dans un autre.

Sur ces derniers points, essaie en encadrant le chemin de guillemets.

 

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

jai mis les guillemet cest idem il y a un espace qui s’intercale. est ce que cela peut venir du fait que les dossier en questions sont partagés sur le serveur avec un $ à la fin ? En gros les sous repertoire en question sont des profils utilisateurs qui sont sous la forme prenom.nom mais sur le serveur ils sont accessible via \\SRV-DC1\prenom.nom$ donc pour accéder à un dossier du 1er utilisateur il faut faire le chemin suivant : \\SRV-dc1\prenom.nom\music par exemple.

Cet espace peut il correspondre au carrectère $ qui n'a pas le bon format dans le script?

0
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 784
9 mars 2024 à 14:58

Comme je l'ai insinué précédemment, cela peut dépendre de la commande qui génère la variable et que je ne connais pas.

Dans un exemple Batch dont je te passe les détails une variable résulte d'une commande DIR et qui ne fonctionne pas parce que le résultat de %FILE% est
"Tartempion " au lieu de "Tartempion".

Dans le cas de figure et en Batch, la solution consiste à supprimer le dernier caractère avant de recoller le nom à l'extension jpg:
 

SET FILE=%FILE:~0,-1%
SET FILE=%FILE%.jpg

Pour déceler l'intrus, dès que ma variable %FILE% est définie, j'écris:
 

ECHO x%FILE%y
pause

me permettant de vérifier s'il y a un espace incongru après x ou avant y et de le corriger.
 

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

je suis un peu perdu avec ça. Car l'idée cest de cacher les dossiers egalement donc meme sil y a des soucis avec certains fichiers qui en effet n'arrivent pas à etre correctement identifié avec cet espace, il devrait quand même me masquer les dossiers contenu dans chacun des profils utilisateurs.

pourquoi le script tout simple avec le nom de chaque profil fonctionne

attrib +h /s /d username\*.*

et pas celui avec la commande boucle for ?

set repertoire="%~dp0\"
for /f "delims= " %%a In ('dir /ad/b/s "%repertoire%"') Do (
SET subdir=%%a & CALL :PROCESS
)
pause
GOTO EOF

:PROCESS
attrib +h /s /d %subdir%\*.*
exit /b

:EOF
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
9 mars 2024 à 15:30

j'ai l'impression que c'est subdir qui pose probleme. Comment m'assurer que je concentre bien les actions sur tous les sous repertoire du repertoire depuis lequel je lance mon script? En gros pour que depuis le repertoire qui contient tous les profils utilisateurs les actions s'apliquent à tous les dossier/fichiers que contiennent chacun des profils utilisateur.

J'ai ajouté  ~0,-1 après subdir mais cela me prend l'integralité de tous les dossier present sur le serveur et pas uniquement ceux dans le repertoire où je me trouve.

:PROCESS
attrib +h /s /d %subdir~0,-1%\*.*
exit /b

0
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 784
9 mars 2024 à 17:19

Je ne sais pas si tu es bien visé par cette histoire d'espace surnuméraire (en effet aussi généré dans mon cas par une commande DIR).

La modification de la variable si c'est le cas doit se faire avant la commande attrib (juste après l'étiquette :PROCESS en lui attribuant par SET la nouvelle valeur et avec la bonne syntaxe (avec le point):
 

SET subdir=%subdir:~0,-1%

Si tu n'est pas sûr de la sortie et avant de chambouler tous tes attributs, teste comme j'ai indiqué: mets REM devant la ligne attrib et mets à la ligne suivante:
 

ECHO X%subdir%Y

Tu vérifies que tous les dossiers cible s'affichent correctement et qu'il n'y a pas d'espace de part et d'autre de leur nom.

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

rien à faire j'ai un espace qui se pointe à chaque fois dans tous les sous dossiers

j'ai essayé une autre methode mais meme resultat.

for /d %%D In (*) Do (
SET dir=%%~fD & CALL :HIDE
)
pause
GOTO EOF

:HIDE
attrib +h /s /d %dir%\*.*
exit /b

:EOF

voila ce que m'indique la fenetre de commande :

attrib +h /s /d C:\dossier\jo.gy \*.*
Format incorrect du paramètre -

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

je ne comprend pas ce que tu entend par cette phrase " juste après l'étiquette:PROCESS en lui attribuant par SET la nouvelle valeur et avec la bonne syntaxe (avec le point):"

c'est quoi le "point" ? Juste apres l'étiquette PROCESS ca veut dire ca ?

for /d %%D In (*) Do (
SET dir=%%~fD & CALL :PROCESS
)
pause
GOTO EOF

:PROCESS
set dir=%dir:~0,-1%
attrib +h /s /d %dir%\*.*
exit /b

:EOF
0
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 10
Modifié le 9 mars 2024 à 19:02

tout est ok à présent en effet il fallait rajouter cette commande set. voici mes 2 batch

cacher tous les dossiers et fichiers des profils utilisateurs :

for /d %%D In (*) Do (
SET dir=%%~fD & CALL :HIDE
)
pause
GOTO EOF

:HIDE
set dir=%dir:~0,-1%
attrib +h /s /d %dir%\*.*
exit /b

:EOF

Afficher tous les dossiers et fichiers sauf certains :

for /d %%D In (*) Do (
SET dir=%%~fD & CALL :SHOW
)
pause
GOTO EOF

:SHOW
set dir=%dir:~0,-1%
attrib -s -h -a /s /d %dir%\*.*
attrib +h /s /d "%dir%\desktop"
attrib +h /s /d "%dir%\config"
exit /b

:EOF
0
brucine Messages postés 14190 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 16 avril 2024 1 784
9 mars 2024 à 19:59

En <7> le paramètre de coupure de variable n'était pas au non endroit (pas défini) et la syntaxe comporte un deux points (pardon, lapsus) après le nom de la variable initiale.

Pour le reste, si ça fonctionne à ton goût, nickel.

1