Bonjour à tous,

Je suis un p'tit nouveau sur le forum !


Je viens de démarrer la programmation batch, et je coince sérieux sur un problême incompréhensible :

Mon objectif est de modifier des tags dans une liste de fichiers DICOM
J'utilise pour cela des executables qui me permettent des les éditer via la console.

voilà le code

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
set D=1000
for %%f in (*.dcm) do (

for /f "delims=" %%a in ('dcmdump.exe +P "0010,0010" %%f ^|tr -s " " ";"  ^|cut -d ";" -f 3 ^| tr -d [] ^| cut -d "_" -f 2') do (
        set M=%%a
        )

for /f "delims=" %%a in ('dcmdump.exe +P "0010,0020" %%f ^|tr -s " " ";"  ^|cut -d ";" -f 3 ^| tr -d [] ^| cut -d "_" -f 3') do (
        set F=%%a
        )

dcmodify.exe -m "(0010,0010)=%D%_%M%_%F%" %%f
dcmodify.exe -m "(0010,0020)=%D%_%M%_%F%" %%f
)
Explication :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
dcmdump.exe +P "0010,0010" %%f ^|tr -s " " ";"  ^|cut -d ";" -f 3 ^| tr -d [] ^| cut -d "_" -f 2
Cette ligne me renvoie 4 chiffres. Cette commande fonctionne sans souci (la suivante également, c'est juste l'ID du tag qui change)

Ces 4 chiffres je les stocke respectivement dans les variables M et F :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
for /f "delims=" %%a in ('dcmdump.exe +P "0010,0010" %%f ^|tr -s " " ";"  ^|cut -d ";" -f 3 ^| tr -d [] ^| cut -d "_" -f 2') do (
        set M=%%a
        )

for /f "delims=" %%a in ('dcmdump.exe +P "0010,0020" %%f ^|tr -s " " ";"  ^|cut -d ";" -f 3 ^| tr -d [] ^| cut -d "_" -f 3') do (
        set F=%%a
        )

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
dcmodify.exe -m "(0010,0010)=%D%_%M%_%F%" %%f
dcmodify.exe -m "(0010,0020)=%D%_%M%_%F%" %%f
Jusque là ça fonctionne quand je le fais un à un.

Là ou ça coince, c'est quand je veux qu'il me le fasse pour chaque fichier (sachant que chaque fois il doit récupérer un tag unique pour M et F). D est fixe du début à la fin. Je fais donc une double boucle for et voilà ce que me crache la console avec 2 fichiers DICOM (extension .dcm)

http://imageshack-france.com/show.ph...batch.JPG.html


Les variables M et F ne sont pas remplacé tout de suite ! Il m'execute d'abord la boucle sans prendre en compte les variables

concretement j'ai ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
dcmodify.exe -m "(0010,0010)=1000__" %%f
au lieu de :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
dcmodify.exe -m "(0010,0010)=1000_XXXXX_XXXXX" %%f


une bonne âme serait la bienvenue ! je suis sec ! Je comprends pas...

merci d'avance

EDIT : je viens de rerevérifier : chacune des commandes fonctionnent ! là ou ça coince c'est quand je fais une nouvelle boucle "for" (pour la liste des fichiers) contenant donc les autres "for"

EDIT 2 : je viens de remarquer un truc encore plus bizarre : si j'ai 2 fichiers DICOM, la boucle est éxecutée 3 fois ! si j'ai 3 fichiers DICOM la boucle est executée 4 fois etc..... pourquoi ?