[BATCH] - Variable dans boucle "FOR" imbriquée

Résolu/Fermé
yaphilde Messages postés 35 Date d'inscription lundi 9 janvier 2017 Statut Membre Dernière intervention 25 octobre 2022 - Modifié le 21 oct. 2022 à 16:14
yaphilde Messages postés 35 Date d'inscription lundi 9 janvier 2017 Statut Membre Dernière intervention 25 octobre 2022 - 25 oct. 2022 à 11:17

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

A voir également:

2 réponses

barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 918
Modifié le 21 oct. 2022 à 19:14

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.


0
yaphilde Messages postés 35 Date d'inscription lundi 9 janvier 2017 Statut Membre Dernière intervention 25 octobre 2022 2
25 oct. 2022 à 11:17

 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é!

0