[batch] double boucle for
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:
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:
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:
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:
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:
dcmodify.exe -m "(0010,0010)=1000__" %%f
au lieu de :
Code:
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 ?