Boucle sur plusieurs fichiers + extraction des données

Fermé
extazz78 Messages postés 2 Date d'inscription vendredi 24 juillet 2020 Statut Membre Dernière intervention 28 juillet 2020 - 24 juil. 2020 à 11:53
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 - 28 juil. 2020 à 19:20
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,
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 917
24 juil. 2020 à 21:42
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

0
extazz78 Messages postés 2 Date d'inscription vendredi 24 juillet 2020 Statut Membre Dernière intervention 28 juillet 2020
28 juil. 2020 à 14:42
Bonjour,

Merci pour ton aide mais ca ne fonctionne pas, aucun fichier ne se génère ? :(
0
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 4 917
Modifié le 28 juil. 2020 à 19:21
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.
0