Boucle sur plusieurs fichiers + extraction des données

Signaler
Messages postés
2
Date d'inscription
vendredi 24 juillet 2020
Statut
Membre
Dernière intervention
28 juillet 2020
-
Messages postés
12690
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
3 septembre 2020
-
Bonjour,

Je réalise un petit script pour mon client actuel afin de récupérer une valeur présente dans un fichier xml.
Les fichiers arrivent avec une partie variable (mais toujours nommée) et une partie fixe.

Le format type du fichier est <date>_<n° séquence>_<marque>_<marque>-<store>_Delivery.xml

Certains XML arrivent dans le même répertoire mais ils ne sont pas à analyser par mon script, je cherche donc uniquement un type bien précis de fichier et seulement ceux la.




@echo off
color b
Echo Recuperation des References externes, veuillez patienter 5 secondes...
echo ---------------------------------------
rem Temps d'attente avant résultat
timeout /t 5 >nul
echo.
echo.
rem Compteur de fichiers traités
set /a nbFichiers=0
for %%a in (C:\Users\SC\Desktop\Scripts\local\*_*_*_*-*_Delivery.xml) do set /a nbFichiers+=1
echo %nbFichiers% fichiers ont ete analyses
echo -------------------------
echo.

rem Boucle qui extrait la valeur "external reference" et génère le resultat texte de CHAQUE FICHIERS nommés *_*_*_*-*_Delivery.xml dans un fichier csv--

for /f "delims=><" %%f in ('dir /b C:\Users\SC\Desktop\Scripts\local\*_*_*_*-*_Delivery.xml') do (

for /f "usebackq delims=;" %%z in ("C:\Users\SC\Desktop\Scripts\local\%%f") do (

for /f "delims=</externalReference> tokens=2" %%a in ('echo "%%z" ^| Findstr /r "<externalReference>"') do echo %%a >> Resultat_Final.csv

)

)


pause


Mon compteur fonctionne bien.
Mes fichiers sont bien trouvés et je retrouve bien la valeur "External Reference".

Seulement mon problème est le suivant ;

Lors de la génération du fichier CSV, je ne récupère que la valeur du premier fichier analysé et pas celle des autres fichiers.
De plus, la valeur est copiée en deux fois car la balise <externalreference> de mon xml est présente deux fois.

Aperçu de mon XML :


<?xml version="1.0" encoding="UTF-8"?>
<deliveryListType>
<values>
<nature>TDMR</nature>
<externalReference>00000999996760</externalReference>
<requestedPlace>
<nature>W</nature>

</requestedPlace>
<documentDate>2020-07-16T08:00:00</documentDate>
<actionDate>2020-07-16T08:00:00</actionDate>
<state>CREE</state>
<origin>
<nature>TDME</nature>
<externalReference>00000999996760</externalReference>
</origin>



Comment faire pour que ma boucle analyse tout les fichiers et retranscrive toutes les valeurs externalreference de chaque fichiers, et ce sur une seule récurrence ?

Vous en remerciant par avance pour votre aide précieuse!

Amicalement,

2 réponses

Messages postés
12690
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
3 septembre 2020
3 538
Bonjour,

Voilà la deuxième partie du script :

rem Boucle qui extrait la valeur "external reference" et génère le resultat texte de CHAQUE FICHIERS nommés *_*_*_*-*_Delivery.xml dans un fichier csv--

setlocal enableextensions enabledelayedexpansion

cd %USERPROFILE%\Desktop\Scripts\local

for %%A in (*_*_*_*-*_Delivery.xml) do (

set "reference="

for /f "tokens=2 delims=>< " %%B in ('findstr /r "externalReference" "%%~fA"') do (

if not defined reference (
set "reference=%%~B"
>> Resultat_Final.csv echo !reference: =!
)

)

)

pause
exit

Messages postés
2
Date d'inscription
vendredi 24 juillet 2020
Statut
Membre
Dernière intervention
28 juillet 2020

Bonjour,

Merci pour ton aide mais ca ne fonctionne pas, aucun fichier ne se génère ? :(
Messages postés
12690
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
3 septembre 2020
3 538
Bizarre chez moi aucun problème.

Pas grave on va contrôler le fonctionnement de chaque boucle FOR, qu'est-ce que tu obtiens avec ce code :

rem Boucle qui extrait la valeur "external reference" et génère le resultat texte de CHAQUE FICHIERS nommés *_*_*_*-*_Delivery.xml dans un fichier csv--

setlocal enableextensions enabledelayedexpansion

cd %USERPROFILE%\Desktop\Scripts\local

for %%A in (*_*_*_*-*_Delivery.xml) do echo %%A

pause
exit

Tu devrais obtenir dans la console la liste des fichiers .xml à traiter.