Ajout dossier dans arborescence avec une variable
Résolu/Fermé
yaphilde
Messages postés
35
Date d'inscription
lundi 9 janvier 2017
Statut
Membre
Dernière intervention
25 octobre 2022
-
23 nov. 2017 à 15:45
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 - 5 déc. 2017 à 05:27
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 - 5 déc. 2017 à 05:27
A voir également:
- Ajout dossier dans arborescence avec une variable
- Dossier appdata - Guide
- Vba range avec variable ✓ - Forum VB / VBA
- Mettre un mot de passe sur un dossier - Guide
- Le fichier à télécharger est la nouvelle note de service de votre entreprise. importez ce fichier dans le bon dossier sur l'espace pix cloud. donnez à ce fichier les mêmes droits d'accès que les autres notes de service. ✓ - Forum Windows
- Dossier rar - Guide
5 réponses
barnabe0057
Messages postés
14440
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 avril 2024
4 907
Modifié le 24 nov. 2017 à 00:05
Modifié le 24 nov. 2017 à 00:05
Bonjour,
Essaie comme ça :
“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
Essaie comme ça :
@echo off
Setlocal enableextensions
cd /d A:\Production\Usagers || exit /B 1
for /f "tokens=*" %%E in ('dir /s /b /ad') do (
if /i "%%~nE"=="BBB" (mkdir "%%~dpnE\Nouveau dossier")
)
pause
“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
barnabe0057
Messages postés
14440
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 avril 2024
4 907
Modifié le 24 nov. 2017 à 20:27
Modifié le 24 nov. 2017 à 20:27
Voilà le code pour ton environnement réel :
“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
@echo off
Setlocal enableextensions
set DossierSource=F:\CSES\PARTAGE\PROCESSUS DE REALISATION\00 - USAGER
set NouveauDossier=04 - Bulletin de notes
set Cible=01 - Scolariser
cd /d %DossierSource% || exit /B 1
for /f "tokens=*" %%E in ('dir /s /b /ad') do (
if /i "%%~nE"=="%Cible%" (mkdir "%%~dpnE\%NouveauDossier%")
)
pause
“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
yaphilde
Messages postés
35
Date d'inscription
lundi 9 janvier 2017
Statut
Membre
Dernière intervention
25 octobre 2022
2
27 nov. 2017 à 11:39
27 nov. 2017 à 11:39
Merci Barnabe,
Tu es réellement une ressource précieuse !!
Alors ton code marche du tonnerre!
Mais je vais continué à t’embêter un tout petit peu dans la continuité de ce poste.
La fonction "mkdir" fonctionne nickel, par contre le dossier que je créé doit avoir des droits NTFS différents de son répertoire parent. Dans ce dossier un groupe de professionnels à un droit d'écriture sur ce nouveau dossier.
J'ai comme piste de remplacer la fonction mkdir par la fonction "Robocopy".
Dans mon process je peux créer mon nouveau dossier en tant que modele
je développe:
J'ai un dossier que je nomme "a:\Dossier de travail" je coupe l'héritage des droits NTFS sur ce dossier.
Je créé dans ce "Dossier de travail" mon dossier "04 - Bulletin de notes". sur celui ci j'y affecte les droits en écriture pour mon groupe enseignant.
avec tout les test que j'ai fait rien aboutit.
voici le type de code pour la fonction Robocopy:
Tu imagines bien que ce qui me pose problème c'est la notion de "MaVariablePourToutMesDossiersUsagers"
Si tu pouvais éclairer mes "petites"lanternes je t'en serai ETERNELLEMENT reconnaissant :-p
@++
Tu es réellement une ressource précieuse !!
Alors ton code marche du tonnerre!
Mais je vais continué à t’embêter un tout petit peu dans la continuité de ce poste.
La fonction "mkdir" fonctionne nickel, par contre le dossier que je créé doit avoir des droits NTFS différents de son répertoire parent. Dans ce dossier un groupe de professionnels à un droit d'écriture sur ce nouveau dossier.
J'ai comme piste de remplacer la fonction mkdir par la fonction "Robocopy".
Dans mon process je peux créer mon nouveau dossier en tant que modele
je développe:
J'ai un dossier que je nomme "a:\Dossier de travail" je coupe l'héritage des droits NTFS sur ce dossier.
Je créé dans ce "Dossier de travail" mon dossier "04 - Bulletin de notes". sur celui ci j'y affecte les droits en écriture pour mon groupe enseignant.
avec tout les test que j'ai fait rien aboutit.
voici le type de code pour la fonction Robocopy:
Robocopy %MaVariablePourMonDossierModele% "%MaVariablePourToutMesDossiersUsagers%\%%A" /E /sec /R:1 /W:1 /TEE ^ /LOG+:%MonFichierDeLog%
Tu imagines bien que ce qui me pose problème c'est la notion de "MaVariablePourToutMesDossiersUsagers"
Si tu pouvais éclairer mes "petites"lanternes je t'en serai ETERNELLEMENT reconnaissant :-p
@++
barnabe0057
Messages postés
14440
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 avril 2024
4 907
27 nov. 2017 à 23:17
27 nov. 2017 à 23:17
A vue de nez ça devrait donner ça :
@echo off
Setlocal enableextensions
set DossierSource=F:\CSES\PARTAGE\PROCESSUS DE REALISATION\00 - USAGER
set NouveauDossier=04 - Bulletin de notes
set Cible=01 - Scolariser
cd /d %DossierSource% || exit /B 1
for /f "tokens=*" %%E in ('dir /s /b /ad') do (
if /i "%%~nE"=="%Cible%" (
Robocopy "a:\Dossier de travail" "%%~dpnE" /E /sec /R:1 /W:1 /TEE /LOG+:%MonFichierDeLog%
)
)
pause
barnabe0057
Messages postés
14440
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 avril 2024
4 907
Modifié le 27 nov. 2017 à 23:51
Modifié le 27 nov. 2017 à 23:51
Tu peux aussi la jouer geek et modifier directement les droits NTFS du nouveau dossier, au lieu d'utiliser un modèle et ROBOCOPY.
Mais c'est juste une idée comme ça, tu fais comme tu veux ;)
La partie soulignée est à remplacer par ton groupe enseignant.
“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
Mais c'est juste une idée comme ça, tu fais comme tu veux ;)
@echo off
Setlocal enableextensions
set DossierSource=F:\CSES\PARTAGE\PROCESSUS DE REALISATION\00 - USAGER
set NouveauDossier=04 - Bulletin de notes
set Cible=01 - Scolariser
cd /d %DossierSource% || exit /B 1
for /f "tokens=*" %%E in ('dir /s /b /ad') do (
if /i "%%~nE"=="%Cible%" (
mkdir "%%~dpnE\%NouveauDossier%"
icacls "%%~dpnE\%NouveauDossier%" /inheritance:r /grant Administrateurs:(OI)(CI)(W)
)
)
pause
La partie soulignée est à remplacer par ton groupe enseignant.
“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
yaphilde
Messages postés
35
Date d'inscription
lundi 9 janvier 2017
Statut
Membre
Dernière intervention
25 octobre 2022
2
28 nov. 2017 à 14:42
28 nov. 2017 à 14:42
Merci Barnabe !!!
C'est clair la solution Geek et vachement plus propre ^^!
Par contre j'ai testé le batch et j'ai une erreur que je n'arrive pas à débugger.
Lorsque j’exécute voici le message que j'ai en retour:
Je pense que c'est un problème avec l'utilisation des variables et le %. Mais je ne suis pas sur.
Si tu pouvais me dire ... Merci @++
C'est clair la solution Geek et vachement plus propre ^^!
Par contre j'ai testé le batch et j'ai une erreur que je n'arrive pas à débugger.
Lorsque j’exécute voici le message que j'ai en retour:
(CI était inattendu.
Je pense que c'est un problème avec l'utilisation des variables et le %. Mais je ne suis pas sur.
Si tu pouvais me dire ... Merci @++
barnabe0057
Messages postés
14440
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 avril 2024
4 907
28 nov. 2017 à 20:58
28 nov. 2017 à 20:58
Effectivement il y a un petit amalgame entre les parenthèses de la boucle FOR et les parenthèses des droits NTFS, pour résoudre le problème on va échapper ces dernières comme ceci :
@echo off
Setlocal enableextensions
set DossierSource=F:\CSES\PARTAGE\PROCESSUS DE REALISATION\00 - USAGER
set NouveauDossier=04 - Bulletin de notes
set Cible=01 - Scolariser
cd /d %DossierSource% || exit /B 1
for /f "tokens=*" %%E in ('dir /s /b /ad') do (
if /i "%%~nE"=="%Cible%" (
mkdir "%%~dpnE\%NouveauDossier%"
icacls "%%~dpnE\%NouveauDossier%" /inheritance:r /grant Administrateurs:(OI^)(CI^)(W^)
)
)
pause
yaphilde
Messages postés
35
Date d'inscription
lundi 9 janvier 2017
Statut
Membre
Dernière intervention
25 octobre 2022
2
>
barnabe0057
Messages postés
14440
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 avril 2024
4 déc. 2017 à 11:04
4 déc. 2017 à 11:04
Coucou Barnabe,
Je voulais te remercier, ça marche du tonnerre! J'ai utilisé la méthode Geek qui est effectivement supra efficace.
J'y ai juste apporté quelque modification pour ne pas casser l'héritage.
Pour information au cas où sa servirait à d'autre voici mon code final:
J'ai modifié :
inheritance:r
en
inheritance:e
Bonne journée et merci encore
Je voulais te remercier, ça marche du tonnerre! J'ai utilisé la méthode Geek qui est effectivement supra efficace.
J'y ai juste apporté quelque modification pour ne pas casser l'héritage.
Pour information au cas où sa servirait à d'autre voici mon code final:
@echo off Setlocal enableextensions set DossierSource=F:\CSES\PARTAGE\PROCESSUS DE REALISATION\00 - USAGER set NouveauDossier=04 - Cahier de suivi pedagogique set Cible=01 - Scolariser cd /d %DossierSource% || exit /B 1 for /f "tokens=*" %%E in ('dir /s /b /ad') do ( if /i "%%~nE"=="%Cible%" ( mkdir "%%~dpnE\%NouveauDossier%" icacls "%%~dpnE\%NouveauDossier%" /inheritance:e /grant *S-1-5-21-1504173220-2678980005-1044320739-1104:(OI^)(CI^)(M^) ) ) pause
J'ai modifié :
inheritance:r
en
inheritance:e
Bonne journée et merci encore
barnabe0057
Messages postés
14440
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 avril 2024
4 907
>
yaphilde
Messages postés
35
Date d'inscription
lundi 9 janvier 2017
Statut
Membre
Dernière intervention
25 octobre 2022
5 déc. 2017 à 05:27
5 déc. 2017 à 05:27
Content que ça fonctionne comme tu veux.
Merci pour le retour, bonne continuation !
A bientôt peut-être.
Merci pour le retour, bonne continuation !
A bientôt peut-être.
24 nov. 2017 à 09:52
Tu es vraiment trop fort! Ca marche nickel dans mon environnement de test.
Si tu as un peu de temps à me consacrer, à partir de la ligne 3 de ton code j'ai du mal à comprendre ce qui se passe, si tu pouvais m'expliquer chaque élément, histoire d'être autonome ^^.
Si ça ne t’embête pas peux tu me modifier le code pour mon environnement de production réel.
Voici sa structure:
Dans une arborescence complète voici le chemin exact où je dois rajouter un dossier pour CHAQUE usager.
F:\CSES\PARTAGE\PROCESSUS DE REALISATION\00 - USAGER\Nom Prénom USAGER\R2 Accompagner\06 - Accompagnement pluridisciplinaire\01 - Scolariser\
et dans ce dossier je doit créer un dossier nommé "04 - Bulletin de notes". Bien entendu ma variable est ce qui est mis en gras dans le chemin c'est à dire le "Nom Prénom de l'usager".
Merci d'avance
24 nov. 2017 à 20:11
- ligne 3 : on se positionne (cd /d) dans le dossier où on doit travailler, en même temps je teste si ce dossier existe vraiment, s'il n'existe pas ou s'il est incorrect on sort du script (|| exit /B 1)
- lignes 4,5,6 : on liste de manière récursive (dir /s) les dossiers/sous-dossiers, grâce à la boucle (for /f) on traite tous ces dossiers/sous-dossiers, lorsqu'on rencontre un dossier BBB (if) on crée un nouveau dossier (mkdir) à l'intérieur.
L'astuce qui fait la différence : la substitution de variable de la boucle FOR
Plus d'infos ici : https://stackoverflow.com/questions/5034076/what-does-dp0-mean-and-how-does-it-work
27 nov. 2017 à 11:41