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

Résolu
Titibreizh35300 Messages postés 10 Statut Membre -  
barnabe0057 Messages postés 17074 Statut Contributeur -
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
A voir également:

3 réponses

barnabe0057 Messages postés 17074 Statut Contributeur 4 925
 
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 Statut Membre
 
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
 
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 17074 Statut Contributeur 4 925
 
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 Statut Membre
 
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 17074 Statut Contributeur 4 925 > Titibreizh35300 Messages postés 10 Statut Membre
 
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 Statut Membre
 
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 17074 Statut Contributeur 4 925 > Titibreizh35300 Messages postés 10 Statut Membre
 
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 Statut Membre
 
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 Statut Membre
 
Merci beaucoup, je vais bosser là dessus. Très sympa de ta part en tous cas.
0
Titibreizh35300 Messages postés 10 Statut Membre
 
J'ai trouvé un truc avec DossierExpresso. Pour le moment pas mieux
0
barnabe0057 Messages postés 17074 Statut Contributeur 4 925
 
A titre d'information, est-ce que tu as réussi à faire quelque chose avec DossierExpresso ?
0
Titibreizh35300 Messages postés 10 Statut Membre > barnabe0057 Messages postés 17074 Statut Contributeur
 
Pas vraiment, mais c'est sympa pour une utilisation ponctuelle
0