Générer une arborescence à partir d'un .bat [Résolu]

Signaler
Messages postés
10
Date d'inscription
mardi 11 juin 2019
Statut
Membre
Dernière intervention
13 juin 2019
-
barnabe0057
Messages postés
12466
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 janvier 2020
-
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

Messages postés
12466
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 janvier 2020
2590
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.


“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
Titibreizh35300
Messages postés
10
Date d'inscription
mardi 11 juin 2019
Statut
Membre
Dernière intervention
13 juin 2019

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.

Il faudra rajouter une étape à la fin du script, plutôt simple à faire.

Je te tiens au courant ce soir.
Messages postés
12466
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 janvier 2020
2590
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

Titibreizh35300
Messages postés
10
Date d'inscription
mardi 11 juin 2019
Statut
Membre
Dernière intervention
13 juin 2019

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
Titibreizh35300
Messages postés
10
Date d'inscription
mardi 11 juin 2019
Statut
Membre
Dernière intervention
13 juin 2019

Et justement.... Question il y a ^^ : si dans mon exemple je m'arrêtais à la subdivision 1.5.3, (et j'avais fait des tests pour aller plus en profondeurs, qu'en est-il pour une fin de subdivision qui, suite à un changement de version, devient, par exemple au pire 1.1.37.4.2. Je pensais bosser sur su pérenne, là ça devient n'importe quoi. Je laisse tout pour aujourd'hui, je vois au taf demain si le pb c'est moi, mon PC, la fatigue. Surtout pas s'énerver lol. Ciao
barnabe0057
Messages postés
12466
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 janvier 2020
2590 > Titibreizh35300
Messages postés
10
Date d'inscription
mardi 11 juin 2019
Statut
Membre
Dernière intervention
13 juin 2019

Tu peux aller plus en profondeur dans les versions, mais en l'état actuel il y a une limitation : tu ne peux utiliser que des chiffres, pas de nombre, donc avec 1.1.37.4.2 le script risque de perdre les pédales.

Un bon script ça se travaille avec le temps, actuellement ce n'est qu'une ébauche, au mieux une bonne base de travail.

Bonne nuit.
Titibreizh35300
Messages postés
10
Date d'inscription
mardi 11 juin 2019
Statut
Membre
Dernière intervention
13 juin 2019

Oui, tout à fait. La base est là. Le problème est la fiabilité des imports-exports et leur pérennité . Je veux bien bosser, mais sur un environnement stable, pas si ça change tous les jours. C'est pourquoi je lève le pied ce soir et je verrai demain. Au pire ce sont les paramètres d'export qu'il faut redéfinir puisque j'avais l'assurance qu'en profondeur on ne dépassait pas 3. Et là j'ai obtenu des aberrations telles que 2 fois 1.1.1. C'est en amont que je dois chercher. Mais disons que... ça gave :)
A+ du positif j'espère
barnabe0057
Messages postés
12466
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 janvier 2020
2590 > Titibreizh35300
Messages postés
10
Date d'inscription
mardi 11 juin 2019
Statut
Membre
Dernière intervention
13 juin 2019

Merci @+
Messages postés
10
Date d'inscription
mardi 11 juin 2019
Statut
Membre
Dernière intervention
13 juin 2019

Merci beaucoup, je vais bosser là dessus. Très sympa de ta part en tous cas.
Titibreizh35300
Messages postés
10
Date d'inscription
mardi 11 juin 2019
Statut
Membre
Dernière intervention
13 juin 2019

J'ai trouvé un truc avec DossierExpresso. Pour le moment pas mieux
barnabe0057
Messages postés
12466
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 janvier 2020
2590
A titre d'information, est-ce que tu as réussi à faire quelque chose avec DossierExpresso ?
Titibreizh35300
Messages postés
10
Date d'inscription
mardi 11 juin 2019
Statut
Membre
Dernière intervention
13 juin 2019
> barnabe0057
Messages postés
12466
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 janvier 2020

Pas vraiment, mais c'est sympa pour une utilisation ponctuelle