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

Résolu
Titibreizh35300 Messages postés 10 Statut Membre -  
barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    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
    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
    2. barnabe0057
       
      Il faudra rajouter une étape à la fin du script, plutôt simple à faire.

      Je te tiens au courant ce soir.
      0
  2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    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
    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
    2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > 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
    3. 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
    4. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > 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
    5. 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
  3. Titibreizh35300 Messages postés 10 Statut Membre
     
    Merci beaucoup, je vais bosser là dessus. Très sympa de ta part en tous cas.
    0
    1. Titibreizh35300 Messages postés 10 Statut Membre
       
      J'ai trouvé un truc avec DossierExpresso. Pour le moment pas mieux
      0
    2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      A titre d'information, est-ce que tu as réussi à faire quelque chose avec DossierExpresso ?
      0
      1. Titibreizh35300 Messages postés 10 Statut Membre > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Pas vraiment, mais c'est sympa pour une utilisation ponctuelle
        0