Cacher tous les fichiers/dossiers des sous repertoire
brucine Messages postés 18796 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 30 janvier 2025 - 9 mars 2024 à 19:59
- Cacher tous les fichiers/dossiers des sous repertoire
- Application pour cacher des applications - Guide
- Renommer tous les fichiers d'un dossier - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Cacher conversation whatsapp - Guide
- Cacher un dossier windows - Guide
8 réponses
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.
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 -
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.
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?
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.
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question9 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
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.
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 -
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
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
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.