Boucle : je me m'en sors pas :(

Résolu/Fermé
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020 - Modifié par Ka-El le 20/09/2013 à 09:53
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020 - 20 sept. 2013 à 14:34
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 20/09/2013 à 10:26
hello
vérifier le code retourné là :
...... do (set diag=%c& echo diag=%diag% ) 
0
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
20 sept. 2013 à 11:18
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 lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
20 sept. 2013 à 11:27
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
20 sept. 2013 à 12:08
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 lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
Modifié par Ka-El le 20/09/2013 à 13:23
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
20 sept. 2013 à 13:15
c'est un .bat ? il faut doubles %
for /F "tokens=2 delims='" %%c in ('affichage -i %%b^|find "code"') do set diag=%%c 
0