[MS DOS] récupérer résultat commande find

Darkmikah Messages postés 8 Statut Membre -  
 billabong_vb -
Bonjour à tous,

je débute et voila mon problème dans un batch:
comment récupérer le résultat de la commande FIND sous DOS ?

explications:
je cherche la chaine de caractère ("toto") dans un fichier texte (monfichier.txt).
j'utilise donc : FIND /c "toto" {c:\monfichier.txt}

le /c me permet de savoir le nombre de lignes où je trouve "toto" dans le fichier.
mais comment récupérer ce nombre dans une variable ?

merci d'avance
Configuration: Windows XP
Firefox 2.0

6 réponses

  1. Sljcfv
     
    Salut,

    Utilise la commande FOR /F comme ceci:

    for /F "usebackq tokens=3 delims= " %i IN (`find /c monfichier`) DO set myvar=%i

    ici ce qui est entre ` ` est une commande DOS. C'est le résultat de cette commande qui sera prise par le FOR.

    Explication de delims= et tokens=3 :
    Mon find d'exmple me renvoyait: ---------- MF2MCAIR.S19: 1
    C'est le "1" que je veux! delims=<espace> va couper la chaine en 3 parties, c'est a dire à chaque espace.
    j'ai donc 3 chaines "----------" , "MF2MCAIR.S19:" et "1"
    Token=3 va prendre la 3eme chaine et la mettre dans la variable i.
    A la fin je fais juste un "set myvar=%i" pour reccupérer la valeur et la mettre dans la variable "i"

    Attention si tu fais cette commande dans un batch il faut doubler les % et écrire "set mayvar=%%i". Enfin il me semble...

    J'espère que c'est pas trop tard pour t'aider!

    Voilà.
    15
  2. sam
     
    Plus simple sur le même principe :
    for /f %i in ('type mon_fichier.txt ^|find /c "toto"') do set myvar=%i

    --> Comme dit précédemmment il faut penser à doubler les % pour un batch.
    5
  3. Thierry
     
    Merci sljcfv pour la commande. Elle m'a permis d'ameliorer mon script basé sur le prog de telnet automatique:
    tst10.exe
    Le but: dés que mon serveur NAS est allumé, il s'annonce par mail avec l'adresse DHCP qu'il a recupéré.
    (c'etait la difficulté).
    Bien sur un raccourci vers le script est placé dans le rep "Demarrage"
    Ca marche tres bien!!

    Contenu du script: "envoi_mel.bat" :

    @echo off
    rem ___________________________________________________________
    rem Envoi d'un mail contenant l'IP du serveur avec txt10.exe
    rem ___________________________________________________________
    cls

    echo.
    FOR /f "tokens=2 delims=:" %%i in ('ipconfig ^|find "Adresse"') DO set IP=%%i
    rem `commande DOS`. C'est le résultat de cette commande qui sera prise par le FOR.
    rem delimiteur = :,tokens=2 prendre 2em champ
    rem il faut penser à doubler les % pour un batch et eviter "_" dans les noms de variables!

    rem ___________________________________________________________

    echo L'adresse IP est: %IP%
    echo.
    echo Envoi d'un mail, Veuillez patienter svp...

    echo smtp.orange.fr 25> cmd_smtp.txt
    echo WAIT "ABO">> cmd_smtp.txt
    echo SEND "HELO ESMTP\m">> cmd_smtp.txt
    echo WAIT "250">> cmd_smtp.txt
    echo SEND "MAIL FROM: <Serveur.NAS@orange.fr>\m">> cmd_smtp.txt
    echo WAIT "250">> cmd_smtp.txt
    echo SEND "RCPT TO: <chez.moi@orange.fr>\m">> cmd_smtp.txt
    echo WAIT "250">> cmd_smtp.txt
    echo SEND "DATA\m">> cmd_smtp.txt
    echo Wait " ">> cmd_smtp.txt
    echo SEND "Subject: Serveur de sauvegarde disponible\mLE serveur NAS est en ligne a l'adresse: %IP% \m.\m">> cmd_smtp.txt
    echo SEND "RSET\m">> cmd_smtp.txt
    echo WAIT "Ok">> cmd_smtp.txt
    echo SEND "QUIT\m">> cmd_smtp.txt
    echo WAIT "Ok">> cmd_smtp.txt
    echo SEND "QUIT\m">> cmd_smtp.txt

    rem ___________________________________________________________
    tst10 /r:cmd_smtp.txt /o:output.log
    rem ___________________________________________________________

    Title Invite
    del cmd_smtp.txt
    cls
    4
  4. Timidei
     
    Bonjour,

    Je ne sais si cela peux t'aider mais si la commande
    FIND /c "toto" {c:\monfichier.txt}
    Met à jour la variable system %ERRORLEVEL%

    Si elle vaut :
    1 c’est qu’il n’a pas trouvé
    0 c’est qu’il a trouvé au moins une occurrence toto

    Stéphane
    2
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. foxtoto2000
     
    bonjour à tous,

    j'ai un petit souci avec la commande FIND également.
    en fait, je sais m'en servir quand j'ouvre une commande MS DOS sous windows, mais lorsque je boote sur une disquette de boot (faites par windows me), il ne me reconnais pas la commande find
    est ce quelqu'un a une explication à cela

    Merci d'avance
    0
    1. timidei
       
      Bonsoir,

      Tu ne dois pas avoir la commande Find sur ta disquette de boot
      Essaye de rajouter la commande Find sur ta disquette, il se trouve C:\Windows\System32\Find.exe

      Stéphane
      0
      1. foxtoto2000 > timidei
         
        merci
        effectivement mon probleme venait de cela
        je viens de voir que l'exe de find n'est pas dans les disquette de boot win 98 et Me
        0
  7. billabong_vb
     
    <h1>Salam a tous les members ! et Voilà jai trouver Un Tutorial pour envoyer Des emails a prtie de MS-dos

    Par La commande TELNET
    </h1>

    http://www.siteduzero.com/tutoriel-3-35599-l-exploit-telnet.html

    Bonne Chance ;)
    0