[BATCH] - Variable dans boucle "FOR" imbriquée
Résoluyaphilde Messages postés 35 Statut Membre -
Bonjour,
A toutes et à tous et merci de l'attention que vous porterez à ma demande.
La finalité:
--------Le contexte
Dans mon espace de travail j'ai un dossier "source". Dans ce dossier source j'ai plusieurs usagers. Pour chaque usager j'ai un répertoire contenant des repertoires avec le nom de matieres (francais/anglais/geographie/...). Il y a dans ces répertoires matieres, un ensemble de fichier pdf que je dois fusionner.
--------Ce qui est demandé
- Fusionner pour chaque matiere les pages de pdf que le dossier contient. Donner au pdf, le nom du dossier qui le contenait et l'enregistrer dans un répertoire qui reprendrai le nom de l'usager.
Voici un peu à quoi ressemble mon espace de travail:
Espace de travail
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Le problème que je rencontre est que quand je veux mettre en variable le nom du dossier "Usager" et le nom du dossier en variable dans ma boucle FOR, je n'arrive pas à les exploiter.
Voici mon code:
echo off chcp 65001 > nul cls cd /d %~dp001-TelechargementSource for /d %%D in (*) do ( echo Concerne l'usager : %%~nxD echo. set Usager=%%~nxD echo ma variable nom de l'usager: %Usager% cd %%~nxD for /d %%D in (*) do ( :: echo voici l'usager: %Usager% echo 00 - NOM de la matiere : %%~nxD set Usager=%%~nxD echo ma variable nom de l'usager: %Usager% echo - 01 Fusion des fichiers pdf contenu dans la matiere echo - 02 Enregistrement du fichier fusionner dans dossier 02-DossierPdfFusionner echo - 03 je nomme mon nouveau pdf en %%~nxD.pdf echo -------------------------------------------------------- echo. ) cd.. ) cd..
J'espere être précis dans ma demande.
Concernant le code pour la fusion PDF j'ai un code qui fonctionne, mais je ne sais pas aboutir à la récurcivité.
Voici ce code
echo off chcp 65001 > nul cls echo vérifier de n'avoir AUCUN fichier PDF actuellement ouvert pause for /d %%D in (*) do ( echo %%~nxD ::echo je reduis les fichiers pdf echo je fusionne les fichiers pdf pdftk %~dp0\%%~nxD\*.pdf output %%~nxD.pdf echo je nomme mon nouveau pdf en %%~nxD rd /S /Q "%~dp0\%%~nxD" md "%~dp0\%%~nxD" move "%~dp0\%%~nxD.pdf" "%~dp0\%%~nxD" ) pause
J'espère avoir été clair sur ma demande
Merci d'avance à toutes et à tous
YLG
Windows / Chrome 106.0.0.0
- [BATCH] - Variable dans boucle "FOR" imbriquée
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Fichier batch - Guide
- Idm for mac - Télécharger - Téléchargement & Transfert
- Instagram for pc - Télécharger - Divers Communication
- Microsoft store download for pc - Guide
2 réponses
Bonjour yaphilde,
Comment ça va depuis le temps ?
Dans le premier code tu imbriques un FOR dans un FOR mais tu utilises la même variable %%D pour les deux, ça ne peut pas marcher correctement. De plus il faut retarder la variable Usager, ce qui donne :
echo off chcp 65001 >nul setlocal enabledelayedexpansion cls cd /d %~dp001-TelechargementSource for /d %%A in (*) do ( echo Concerne l'usager : %%~nxA echo. set "Usager=%%~dpnxA" cd !Usager! for /d %%D in (*) do ( echo 00 - NOM de la matiere : %%~nxD echo - 01 Fusion des fichiers pdf contenu dans la matiere echo - 02 Enregistrement du fichier fusionner dans dossier 02-DossierPdfFusionner echo - 03 je nomme mon nouveau pdf en %%~nxD.pdf echo -------------------------------------------------------- echo. pdftk "!Usager!\%%~nxD\*.pdf" output %%~nxD.pdf ) cd.. ) cd..
Je n'ai pas eu le temps de tester donc n'hésite pas à me remonter les problèmes s'il y en a.
Coucou Barnabe,
Mille mercis comme d'hab tu es redoudable d'efficacité ????! Et toujours aussi pédagogue!
Tout fonctionne niquel. J'ai juste rajouter (%~dp0) pour positionner mon executable de pdftk (logiciel libre https://www.pdflabs.com/tools/pdftk-server/)
Je mets mon code final pour partager à la communauté:
Objectifif : Batch fusion PDF
Outil utilisé PDFTK (pdftk.exe + libiconv2.dll) placé au même niveau que mon batch
Batch de fusion PDF:
echo off chcp 65001 >nul setlocal enabledelayedexpansion cls cd /d %~dp001-TelechargementSource for /d %%A in (*) do ( echo Concerne l'usager : %%~nxA echo. set "Usager=%%~dpnxA" cd !Usager! for /d %%D in (*) do ( echo 00 - NOM de la matiere : %%~nxD echo - 01 Fusion des fichiers pdf contenu dans la matiere echo - 02 je nomme mon nouveau pdf en %%~nxD.pdf et l'enregistre dans le dossier de l'élève echo - 03 Je supprime le dossier qui contenait mes sources echo -------------------------------------------------------- echo. %~dp0pdftk.exe "!Usager!\%%~nxD\*.pdf" output %%~nxD.pdf rd /S /Q "!Usager!\%%~nxD" ) cd.. ) cd..
Très bonne journée à tous et encore Merci Barnabe pour ta réactivité!