[Résolu] For imbriqué dans un autre for

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
barnabe0057
SuperBatcher
Messages : 105
Enregistré le : 24 janv. 2017 13:41

[Résolu] For imbriqué dans un autre for

Message par barnabe0057 »

Bonjour,

Je suis en train de créer un script dont le but est de convertir des images jpeg en document pdf.

Les images proviennent d'une GED (gestion électronique de documents) et sont classés dans une arborescence avec plusieurs niveaux de sous-dossiers.

Plus d'informations ici : http://www.commentcamarche.net/forum/af ... borescence

Voilà le code que j'ai testé et qui fonctionne :

Code : Tout sélectionner

@echo off
     
     
    :: on teste si nconvert.exe est présent
     
    if not exist %windir%\system32\nconvert.exe goto :eof
     
     
    :: répertoire source contenant les documents numérisés
     
    set rep_source=D:\RECUP_GED\3000057\Administratif
     
     
    :: on teste si le répertoire source existe bien
     
    cd %rep_source%
    if not %errorlevel%==0 goto :eof
     
    if not exist "%rep_source%\Documents_PDF" mkdir "%rep_source%\Documents_PDF"
     
     
    :: on définit un répertoire temporaire
     
    set dir_temp=D:\TMP_jpg_to_pdf
     
     
    :: on regroupe toutes les pages de chaque document
     
    for /f "tokens=1,2,3 delims=_." %%a in ('dir /b /a-d-s-l "*.jpg"') do (
     
    if not exist %dir_temp%\%%a mkdir %dir_temp%\%%a
     
    copy %%a_%%b.%%c %dir_temp%\%%a\ > nul
     
    )
     
    echo.
     
     
    :: on traite les documents un par un
     
    cd %dir_temp%
     
    for /f "tokens=*" %%a In ('dir /b /ad "*.*"') do (
     
    set fichier=%%a
     
    cd %dir_temp%\%%a
     
    set /a compteur=0
     
    Setlocal enableextensions enabledelayedexpansion
     
    For /r %%i In (*.jpg) Do (set /a compteur+=1)
     
    if !compteur! GTR 1 (nconvert -in jpeg -out pdf -multi -o res_!fichier!.pdf *.jpg) else (nconvert -in jpeg -out pdf -o res_!fichier!.pdf *.jpg)
     
    echo.
     
    move /y "res_!fichier!.pdf" "!rep_source!\Documents_PDF" > nul
     
    )
     
    Endlocal
     
    cd %USERPROFILE%
     
    rmdir /s /q "%dir_temp%"
     
    explorer /select,"%rep_source%\Documents_PDF"
     
    :eof


Le code ci-dessus fonctionne bien avec un dossier, mais j'ai des sous-dossiers à parcourir donc j'ai voulu imbriquer tout ça dans une autre boucle for mais j'obtiens le message suivant : "la syntaxe n'est pas correcte"

Je pense à un problème d'expansion de variable retardée, mais j'ai beau avoir essayé de comprendre ce concept, ça reste un mystère pour moi.

Merci d'avance pour votre aide.
barnabe0057
SuperBatcher
Messages : 105
Enregistré le : 24 janv. 2017 13:41

Re: [Résolu] For imbriqué dans un autre for

Message par barnabe0057 »

J'ai trouvé l'inspiration, j'ai finalement résolu mon problème.

Voilà le code pour ceux que ça pourrait intéresser :

Code : Tout sélectionner

    @echo off
     
    if not exist %windir%\system32\nconvert.exe goto :eof
     
    cd %USERPROFILE%\RECUP_GED
     
    if not %errorlevel%==0 goto :eof
     
    for /f "tokens=*" %%K In ('dir /b /ad "*.*"') do (
     
    for /f "tokens=*" %%E In ('dir /b /ad "%%~dpnK\*.*"') do (
     
    if not exist "%%~dpnK\%%E\Documents_PDF" mkdir "%%~dpnK\%%E\Documents_PDF"
     
    if not exist "%%~dpnK\%%E\TMP_jpg_to_pdf" mkdir "%%~dpnK\%%E\TMP_jpg_to_pdf"
     
    for /f "tokens=1,2,3 delims=_." %%A in ('dir /b /a-d-s-l "%%~dpnK\%%E\*.jpg"') do (
     
    if not exist "%%~dpnK\%%E\TMP_jpg_to_pdf\%%A" mkdir "%%~dpnK\%%E\TMP_jpg_to_pdf\%%A"
     
    copy %%~dpnK\%%E\%%A_%%B.%%C %%~dpnK\%%E\TMP_jpg_to_pdf\%%A > nul
     
    )
     
    for /f "tokens=*" %%R In ('dir /b /ad "%%~dpnK\%%E\TMP_jpg_to_pdf\*.*"') do (
     
    set fichier=%%R
     
    set /a compteur=0
     
    Setlocal enableextensions enabledelayedexpansion
     
    For /r %%I In (*.jpg) Do (set /a compteur+=1)
     
    if !compteur! GTR 1 (nconvert -in jpeg -out pdf -multi -c 5 -o res_!fichier!.pdf %%~dpnK\%%E\TMP_jpg_to_pdf\%%R\*.jpg) else (nconvert -in jpeg -out pdf -c 5 -o res_!fichier!.pdf %%~dpnK\%%E\TMP_jpg_to_pdf\%%R\*.jpg)
     
    echo.
     
    move /y "res_!fichier!.pdf" "%%~dpnK\%%E\Documents_PDF" > nul
     
    Endlocal
     
    )
     
    rmdir /s /q "%%~dpnK\%%E\TMP_jpg_to_pdf"
     
    )
     
    )
     
    explorer /select,"%CD%"
     
    :eof

Je rappelle le but du script, c'est-à-dire trier et convertir des images jpeg en document pdf, au préalable il faut télécharger l'outil Nconvert disponible ici :

http://www.xnview.com/fr/nconvert/

Il faut récupérer le fichier nconvert.exe et le copier dans C:\Windows\System32

Bonne nuit, à bientôt peut-être.
Répondre