Boucle : je me m'en sors pas :(

Résolu
Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   -  
Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je tente de faire une boucle qui me parait relativement simple, mais pourtant je ne parviens pas à obtenir le résultat attendu.
Voici ma problématique :
Je possède un fichier toto.txt dont le contenu est le suivant :
993090
993091
993092
993093
993094
993095
993096
993097
993098
993100
993103

Ces chiffres correspondent à des processus qui possèdent un code caché.
je dois faire le tri de ces chiffres selon le code qui est caché.
Voici comment je procède (je vais simplifier) :

@REM je lance ma boucle en prenant appui sur le fichier toto.txt :
for /f "tokens=1" %b in ('type D:\ka-el\toto.txt') do (
@REM La commande suivante permet de récupérer et de variabiliser le code caché
for /F "tokens=2 delims='" %c in ('affichage -i %b^|find "code"') do set diag=%c
@REM Si le code est égal à 205 je dois poursuivre ma boucle sans rien faire :
if "%diag%" == "205" (
goto :end
) else (
@REM Si le paramètre %diag% est différent de 205 alors je dois noter le chiffre du processus dans un fichier tata.txt
echo %b >> tata.txt
)
:end
)
Je n'arrive pas du tout à faire focntionner cette boucle. Je désespère, car je suis sur que c'est simple, mais impossible d'obtenir un résultat concluant.
Auriez-vous svp une solution à me proposer ?
Merci beaucoup.
K

1 réponse

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
vérifier le code retourné là :
...... do (set diag=%c& echo diag=%diag% ) 
0
Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention  
 
je viens de faire un nouveau test en suivant ton conseil dubcek et je constate qu'au moment où le code n'est pas égal à 205, et bien le script ne fait rien et surtout voit le code comme si il était à 205 ! :
D:\ka-el>(
for /F "tokens=2 delims='" %c in ('affichage -i 1000306|find "code"') do (set diag=%c & echo diag=205 )
if "205" == "205" (echo notok ) else (echo 1000306 1>>tata.txt )
)


Je redonne ma boucle pour davantage de compréhension :
for /f "tokens=1" %b in ('type D:\ka-el\toto.txt') do (
for /F "tokens=2 delims='" %c in ('affichage -i %b^|find "code"') do (set diag=%c& echo diag=%diag% )
if "%diag%" == "205" (
echo notok
) else (
echo %b >> fred.txt
)
)

Merci pour votre aide.
0
Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention  
 
Voici le code "caché" du 1000306 :
for /F "tokens=2 delims='" %c in ('affichage -i 1000306^|find "code"') do set diag=%c
D:\ka-el>echo %diag%
310

Pourquoi dans la boucle il l'affiche en 205 ?
Bizarre.... Bizarrre....
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
essayer avec
setlocal enableDelayedExpansion
au début du script¨, et remplacer % par !
if "!diag!" == "205" (
0
Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai saisi les commandes suivantes :

for /f "tokens=1" %b in ('type D:\ka-el\toto.txt') do (
setlocal enableDelayedExpansion
More? for /F "tokens=2 delims='" %c in ('affichage -i %b^|find "code"') do set diag=%c
More? if "!diag!" == "205" (
More? echo notok
More? ) else (
More? echo %b >> tata.txt
More? )
More? )

Mais une partie du résultat donne ceci :
D:\ka-el>(
for /F "tokens=2 delims='" %c in ('affichage -i 1022023|find "code"') do set diag=%c
if "!diag!" == "205" (echo notok ) else (echo 1022023 1>>tata.txt )
)

D:\ka-el>set diag=205


Manifestement il n'arrive pas à traduire "!diag!" et c'est donc la redirection vers le fichier tata.txt qui est systématiquement prise en compte.

Dur, dur ! :-)
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
c'est un .bat ? il faut doubles %
for /F "tokens=2 delims='" %%c in ('affichage -i %%b^|find "code"') do set diag=%%c 
0