Boucle : je me m'en sors pas :(

Résolu
Ka-El Messages postés 279 Statut Membre -  
Ka-El Messages postés 279 Statut Membre -
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

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    vérifier le code retourné là :
    ...... do (set diag=%c& echo diag=%diag% ) 
    0
    1. Ka-El Messages postés 279 Statut Membre
       
      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
    2. Ka-El Messages postés 279 Statut Membre
       
      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
    3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      essayer avec
      setlocal enableDelayedExpansion
      au début du script¨, et remplacer % par !
      if "!diag!" == "205" (
      0
    4. Ka-El Messages postés 279 Statut Membre
       
      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
    5. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      c'est un .bat ? il faut doubles %
      for /F "tokens=2 delims='" %%c in ('affichage -i %%b^|find "code"') do set diag=%%c 
      0