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

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

  • Votes
  • Date
  • Date décroissante
  1. 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à.
    1. 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.
      1. 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
        1. 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
          1. 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
            1. 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
            2. @timideimerci
              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
          2. <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 ;)