Générer une arborescence à partir d'un .bat

Résolu/Fermé
Titibreizh35300 Messages postés 10 Date d'inscription mardi 11 juin 2019 Statut Membre Dernière intervention 13 juin 2019 - 11 juin 2019 à 21:07
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 - 14 juin 2019 à 05:53
Bonjour,

Je cherche à générer une arborescence rentrée via free plane, soit via Calc de LO, soit via un batch.
Côté Calc, je cale sur les boucles imbriquées, pour le batch, ce serait à partir d'un fichier texte de la forme :
1 CEREM;07
1.1 Comm;05
1.1.2 Carton_Invit;02
1.1.1 Carte_Voeux;11
1.1.3 Discours;04
1.1.4 Serv;04
1.2 ESPAUM;02
1.2.1 Org;17
1.3 Even;20
1.3.1 N_Proj;06
1.3.2 N_Proj2;06
1.3.3 N_Proj3;20
1.4 Medaille;17
1.4.1 Comm;05
1.4.2 Dev;15
1.4.3 RH;05
1.4.4 Serv;17
1.5 Voeux;09
1.5.1 BDD;10
1.5.2 Dev;10
1.5.3 Etq;18
Tout ce qui est derrière le ";" devant disparaitre. Là je cale aussi.
Merci de votre aide

3 réponses

barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 11 juin 2019 à 22:35
Bonjour,

Voilà un exemple parmi d'autres :

@echo off
setlocal enableextensions enabledelayedexpansion
chcp 1252 >nul

cd /d ***chemin de ton dossier contenant le fichier texte*** || exit /b 1

for /f "tokens=1,2,* delims=; " %%A in (fichier.txt) do (
echo %%A | find "." >nul && call :fonction "%%~A" "%%~B" || if not exist "%%~A %%~B" (mkdir "%%~A %%~B" & echo ### Création du dossier ==^>^> %%~A %%~B)
)

echo. & pause
exit /b 0

:fonction

set index=%~1
set parent=!index:~,-2!

set resultat=0

for /f "delims=" %%E in ('2^>nul dir /s /b /ad ^| findstr /c:"!parent! "') do (

set /a resultat+=1
if !resultat! EQU 1 (
pushd "%%~dpnxE"
if not exist "%~1 %~2" (mkdir "%~1 %~2" & echo ### Création du dossier ==^>^> %~1 %~2)
popd
)

)

goto :eof

Bon maintenant dodo, je serai dispo demain soir à partir de 20h00 si tu as des questions.

1
Titibreizh35300 Messages postés 10 Date d'inscription mardi 11 juin 2019 Statut Membre Dernière intervention 13 juin 2019
12 juin 2019 à 07:50
Vraiment top. Merci. Pour être top je voudrai enlever les 1, 1.1, 1.1.2, etc... Si je ne trouve pas et que tu as une idée. Merci encore. Si j'ai le temps au taf, je m'y colle.
0
barnabe0057
12 juin 2019 à 08:49
Il faudra rajouter une étape à la fin du script, plutôt simple à faire.

Je te tiens au courant ce soir.
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
12 juin 2019 à 22:07
Voilà une version avec les numéros supprimés :

@echo off
setlocal enableextensions enabledelayedexpansion
chcp 1252 >nul

cd /d ***chemin de ton dossier contenant le fichier texte*** || exit /b 1

for /f "tokens=1,2,* delims=; " %%A in (fichier.txt) do (
echo %%A | find "." >nul && call :creer "%%~A" "%%~B" || if not exist "%%~A %%~B" (mkdir "%%~A %%~B" & echo ### Création du dossier ==^>^> %%~A %%~B)
)

for /f "delims=" %%A in ('2^>nul dir /b /s /ad ^| sort /r') do (
echo %%~nxA | findstr /r "^[0-9]" >nul && (pushd "%%~dpA" & call :renommer "%%~nxA")
popd
)

echo. & pause
exit /b 0


:creer

set index=%~1
set parent=!index:~,-2!

set resultat=0

for /f "delims=" %%E in ('2^>nul dir /s /b /ad ^| findstr /c:"!parent! "') do (
set /a resultat+=1
if !resultat! EQU 1 (if not exist "%%~fE\%~1 %~2" (mkdir "%%~fE\%~1 %~2" & echo ### Création du dossier ==^>^> %~1 %~2))
)

goto :eof


:renommer

for /f "tokens=1,* delims= " %%H in ("%~1") do move "%~1" "%%~I" >nul

goto :eof

1
Titibreizh35300 Messages postés 10 Date d'inscription mardi 11 juin 2019 Statut Membre Dernière intervention 13 juin 2019
13 juin 2019 à 01:32
Bonsoir,

C'est réellement sympa de ta part. Je m"embringue dans des trucs beaucoup plus alambiqués et moins efficaces. A moi de progresser donc. Grand merci.
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > Titibreizh35300 Messages postés 10 Date d'inscription mardi 11 juin 2019 Statut Membre Dernière intervention 13 juin 2019
13 juin 2019 à 05:47
Ce n'est pas facile pour un débutant, même moi j'ai un peu galéré, je suis tombé sur un problème imprévu, j'ai mis environ 2h30 pour trouver la totalité du script.
0
Titibreizh35300 Messages postés 10 Date d'inscription mardi 11 juin 2019 Statut Membre Dernière intervention 13 juin 2019
13 juin 2019 à 07:17
Oui, ça n'est pas simple. J'avais commencé il y a longtemps. Je suis parti de ces acquis, mais insuffisants même après de nombreuses recherches. Je passe du temps à comprendre et apprendre de ce que tu proposes. Quel était le problème ?
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > Titibreizh35300 Messages postés 10 Date d'inscription mardi 11 juin 2019 Statut Membre Dernière intervention 13 juin 2019
13 juin 2019 à 19:08
Le problème c'était hier soir pour virer les numéros devant, je pensais que ça serait hyper simple mais non, à chaque fois le script me répondait que le chemin n'était pas bon, normal car ma boucle renommait à la volée les dossiers "parents" avant les dossiers "enfants" du coup le chemin des dossiers "enfants" était modifié et faisait planter la commande REN, mais j'ai réussi à contourner le problème en inversant l'ordre de traitement avec la commande SORT, et grâce aussi aux chemins relatifs (merci à la commande PUSHD)
0
Titibreizh35300 Messages postés 10 Date d'inscription mardi 11 juin 2019 Statut Membre Dernière intervention 13 juin 2019
Modifié le 13 juin 2019 à 20:55
OK, j'avais mis un gros point d'interrogation sur le popd et le pushd... J'ai cherché ce à quoi ça pouvait servir et bon, des éclaircissements, mais encore à apprendre. Mon objectif n'est pas de "pomper" mais de faire en comprenant.... Certes, ça prend du temps, mais je te remercie de passer un peu de ton temps pour expliquer. C'est très enrichissant. Il se peut que je revienne pour d'autres éclaircissements, je pioche pas mal dans "https://initscreen.developpez.com/tutoriels/batch/apprendre-la-programmation-de-script-batch/"... mais pas toujours simple.
Bonne soirée
0
Titibreizh35300 Messages postés 10 Date d'inscription mardi 11 juin 2019 Statut Membre Dernière intervention 13 juin 2019
12 juin 2019 à 06:47
Merci beaucoup, je vais bosser là dessus. Très sympa de ta part en tous cas.
0
Titibreizh35300 Messages postés 10 Date d'inscription mardi 11 juin 2019 Statut Membre Dernière intervention 13 juin 2019
12 juin 2019 à 08:22
J'ai trouvé un truc avec DossierExpresso. Pour le moment pas mieux
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
13 juin 2019 à 05:44
A titre d'information, est-ce que tu as réussi à faire quelque chose avec DossierExpresso ?
0
Titibreizh35300 Messages postés 10 Date d'inscription mardi 11 juin 2019 Statut Membre Dernière intervention 13 juin 2019 > barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
13 juin 2019 à 07:18
Pas vraiment, mais c'est sympa pour une utilisation ponctuelle
0