Extraire des données

Résolu
BN15 Messages postés 25 Statut Membre -  
 barnabe0057 -
Bonjour,

J'ai un fichier test.txt qui contient les infos suivante:
;
; Message Information file;[message]origmailbox=029context=app-vmblastmacrocontext=exten=1rdnis=unknownpriority=1callerchan=SIP/Bouygue-00000ba5callerid="testVoiceMail/BAL1030" <1030>origdate=Tue Jun 20 06:40:00 AM UTC 2017origtime=1497940800category=flag=duration=12

Je souhaite extraire les infos <1030> Jun 20 06:40:00 pour les écrire dans un fichier info.txt.

Tout cela grâce à un fichier .bat.

pouvez-vous m'aidez car mes connaissances sont limités dans le domaine.

Merci d'avance.

5 réponses

Résumé de la discussion

L’objectif est d’extraire la date et l’heure sous forme <1030> Jun 20 06:40:00 dans test.txt et de les écrire dans info.txt via un script batch Windows.
Plusieurs propositions techniques évoquent l’emploi de for /f avec délimiteurs et tokens pour cibler la partie après le signe <, ou l’utilisation de delims personnalisés comme = et < pour extraire directement la date‑heure.
En pratique, les échanges portent sur l’ajustement des délimiteurs, le ciblage de lignes comme origdate et la redirection vers info.txt, avec des retours d’erreurs liés aux chemins et formats.
Dernier élément utile: certaines solutions montrent qu’un paramètre eol et l’usage de tokens peuvent préserver le format original et éviter des échecs lorsque des lignes contiennent des guillemets ou des espaces.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Bonjour,

    Là tout de suite je n'ai pas de windows pour tester, mais ça devrait ressembler à ça :

    @echo off
    setlocal enabledelayedexpansion

    for /f "eol=µ tokens=1,* delims=^<" %%A in (test.txt) do (
    set infos=%%B
    set infos=!infos:~0,34!
    echo !infos!
    )

    endlocal
    pause
    exit



    “L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
    0
    1. BN15 Messages postés 25 Statut Membre
       
      le resultat envoyé par le echo est ~0,34
      0
    2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > BN15 Messages postés 25 Statut Membre
       
      Je testerai ça dès que je serai rentré chez moi, d'ici une demi-heure.

      En attendant ça dit quoi si tu remplaces
      echo !infos!
      par
      echo %%B
      0
    3. BN15 Messages postés 25 Statut Membre > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
       
      le résultat est: Commande ECHO d‚sactiv‚e.

      ma commande echo est agrémenté de > "cheminacces\infos.txt" pour stocker les infos dans un fichier texte.
      0
    4. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > BN15 Messages postés 25 Statut Membre
       
      Oui normal, essaie comme ça :
      @echo off

      for /f "eol=µ tokens=1,* delims=^<" %%A in (test.txt) do (
      echo %%B > "cheminacces\infos.txt"
      )

      pause
      exit

      Ca devrait donner ça :
      <1030>origdate=Tue Jun 20 06:40:00 AM UTC 2017origtime=1497940800category=flag=duration=12
      0
    5. BN15 Messages postés 25 Statut Membre > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
       
      eu non toujours pareil
      0
  2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Je viens de tester, le premier script fonctionne bien :

    @echo off
    setlocal enabledelayedexpansion

    for /f "eol=µ tokens=1,* delims=^<" %%A in (test.txt) do (
    set infos=%%B
    set infos=!infos:~0,34!
    echo !infos! > "cheminacces\infos.txt"
    )

    endlocal
    pause
    exit

    0
    1. BN15 Messages postés 25 Statut Membre
       
      le resultat retourné par ce script est ~0-34.

      quel resultat obtient tu avec le script ?
      0
    2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > BN15 Messages postés 25 Statut Membre
       
      J'obtiens ça : 1030> Jun 20 06:40:00

      Tu as dû oublier un caractère quelque part, tu as bien fait un copier-coller ?
      0
    3. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Je vois que tu obtiens : ~0-34

      Ce qui me laisse penser que tu as mis un tiret au lieu d'une virgule
      0
    4. BN15 Messages postés 25 Statut Membre
       
      oui j'ai fait un copier coller du script.

      je ne comprend pas pourquoi le résultat est différent.
      0
    5. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > BN15 Messages postés 25 Statut Membre
       
      Poste ton script, on sait jamais ;)

      J'ai testé sur l'échantillon que tu as fourni au début.

      Est-ce que tu aurais un échantillon plus grand ?
      0
  3. BN15 Messages postés 25 Statut Membre
     
    ~0,34
    0
    1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      Est-ce que ton fichier s'appelle bien test.txt ?
      0
    2. BN15 Messages postés 25 Statut Membre
       
      oui.
      0
  4. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    J'ai une idée, essaie comme ça :

    @echo off
    setlocal enableextensions enabledelayedexpansion

    set source=%USERPROFILE%\Pictures\Debut

    cd %source%

    for /f "eol=µ usebackq tokens=1,* delims=<" %%A in ("test.txt") do (
    set infos=%%B
    set infos=!infos:~0,38!
    echo ^<!infos! > infos.txt
    )

    endlocal
    pause
    exit



    “L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
    0
    1. BN15 Messages postés 25 Statut Membre
       
      Création du fichier OK mais le résultat dans le fichier est <~0,38
      0
    2. BN15 Messages postés 25 Statut Membre
       
      sebon pb trouvé, quand j'ai copier l'intérieur de mon fichier sur le site, la mise en forme a changé.
      il doit y avoir un espace ou un saut de ligne en quelque part en trop sur le site net par rapport à mon fichier
      0
    3. BN15 Messages postés 25 Statut Membre
       
      voici le copier coller exacte de mon fichier d'origine

      ;
      ; Message Information file
      ;
      [message]
      origmailbox=029
      context=app-vmblast
      macrocontext=
      exten=1
      rdnis=unknown
      priority=1
      callerchan=SIP/Bouygue-00000ba5
      callerid="testVoiceMail/BAL1030" <1030>
      origdate=Tue Jun 20 06:40:00 AM UTC 2017
      origtime=1497940800
      category=
      flag=
      duration=12
      0
    4. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > BN15 Messages postés 25 Statut Membre
       
      Bon on va faire du debug :

      @echo off
      setlocal enableextensions enabledelayedexpansion

      set source=%USERPROFILE%\Pictures\Debut

      cd %source%
      echo. & echo le script travaille dans le dossier %CD%
      echo. & pause
      echo.

      if not exist "test.txt" (echo le fichier n'existe pas)
      echo. > infos.txt

      for /f "eol=µ usebackq tokens=1,* delims=<" %%A in ("test.txt") do (
      echo %%A ######### %%B
      set infos=%%B
      set infos=!infos:~0,38!
      echo ^<!infos! >> infos.txt
      )

      endlocal
      pause
      exit
      0
    5. BN15 Messages postés 25 Statut Membre > BN15 Messages postés 25 Statut Membre
       
      Du coup le code que tu m'a fournis doit je suppose etre modifié ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. BN15
     
    Bonjour

    Nouveau besoin sur le meme sujet.

    Les infos extraite doivent etre moins nombreuse.

    Pouvez-vous m'aidez ?

    Il me faut uniquement le numero de téléphone.
    0
    1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      Slt, il se trouve où le numéro de téléphone ?
      0
    2. BN15
       
      alors, le numero de tel se trouve dans un fichier texte.

      voici les infos d'un fichier texte

      ;; Message Information file;[message]origmailbox=029context=app-vmblastmacrocontext=exten=1rdnis=unknownpriority=1callerchan=SIP/Bouygue0000734callerid="testVoiceMail/BAL0674821585" <674821585>origdate=Fri Jun 16 10:13:18 PMUTC 2017origtime=1497617604category=flag=duration=15

      ;; Message Information file;[message]origmailbox=029context=app-vmblastmacrocontext=exten=1rdnis=unknownpriority=1callerchan=SIP/Bouygue0000733callerid="testVoiceMail/BAL0674821585" <674821585>origdate=Fri Jun 16 11:15:20 PMUTC 2017origtime=1497617604category=flag=duration=15

      ;; Message Information file;[message]origmailbox=029context=app-vmblastmacrocontext=exten=1rdnis=unknownpriority=1callerchan=SIP/Bouygue0000735callerid="testVoiceMail/BAL0674821585" <674821585>origdate=Fri Jun 16 12:53:24 PMUTC 2017origtime=1497617604category=flag=duration=15

      ;; Message Information file;[message]origmailbox=029context=app-vmblastmacrocontext=exten=1rdnis=unknownpriority=1callerchan=SIP/Bouygue0000736callerid="testVoiceMail/BAL0674821585" <674821585>origdate=Fri Jun 16 13:53:00 PMUTC 2017origtime=1497617604category=flag=duration=15



      Il me faut extraire le <674821585>
      0
    3. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > BN15
       
      Comme ça :
      for /f "usebackq eol=µ tokens=1,2 delims=<>" %%A in ("fichier.txt") do (echo %%B)
      0
    4. BN15
       
      Voici l'etat actuel des chose.

      J'ai un dossier partager nommé J: dans lequel se trouve un fichier msgxxx.txt et msgxxx.wav.

      Je doit recupérer le numero de tel du fichier msgxxx.txt pour le copier dans un fichier infos.txt qui se trouve dans le chemin C:\Users\Utilisateur\Desktop\Script LDNathan\blat\blat3216\docs\infos.txt.


      Dans ce meme chemin se trouve mon script pour extraire et copier dans le fichier infos.txt.


      voici mon script actuel.

      Celui-ci ne marche pas


      @echo off
      setlocal enableextensions enabledelayedexpansion

      for /r "J:\" %%i in (*.wav) do set msg=%%~nxi
      echo %msg%

      for /r "J:\" %%i in (*.txt) do set msgt=%%~nxi
      echo %msgt%


      cd "J:\"

      echo. > "C:\Users\Utilisateur\Desktop\Script LDNathan\blat\blat3216\docs\infos.txt"

      for /f "usebackq eol=µ tokens=1,2 delims=<>" %%A in ("J:\%msgt%") do (echo %%B) do (

      if /i "%%A"=="callerid" (call :numero "%%B")
      if /i "%%A"=="origdate" (echo ^<!num!^> %%B >> "C:\Users\Utilisateur\Desktop\Script LDNathan\blat\blat3216\docs\infos.txt")

      )

      endlocal


      call "C:\Users\Utilisateur\Desktop\Script LDNathan\blat\blat3216\docs\envoie.bat"


      exit


      :numero
      for /f "usebackq tokens=1,2 delims=^<^>" %%E in ('%1') do (
      set num=%%F
      )


      goto :eof



      Merci d'avance.
      0
    5. barnabe0057 > BN15
       
      Essaie comme ça :

      @echo off
      setlocal enableextensions enabledelayedexpansion

      pushd J: || goto :eof

      set dossier=%USERPROFILE%\Desktop\Script LDNathan\blat\blat3216\docs

      echo. > "%dossier%\infos.txt"

      for %%i in (*.wav) do (call :numero "%%~nxi")

      for %%i in (*.txt) do (call :numero "%%~nxi")

      call "%dossier%\envoie.bat"

      endlocal

      popd

      echo. & pause

      exit


      :numero

      for /f "usebackq eol=µ tokens=1,2 delims=<>" %%A in ("%~1") do (set num=%%B)

      echo. & echo ==^>^> %~1 [!num!]

      echo !num! >> "%dossier%\infos.txt"

      goto :eof

      rem
      0