Extraire des données [Résolu/Fermé]

Signaler
Messages postés
25
Date d'inscription
mardi 20 juin 2017
Statut
Membre
Dernière intervention
21 juin 2017
-
 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

Messages postés
13546
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 juin 2021
4 399
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.”
Messages postés
25
Date d'inscription
mardi 20 juin 2017
Statut
Membre
Dernière intervention
21 juin 2017

j'avais tenter partout sauf entre endlocal et exit

merci
Messages postés
25
Date d'inscription
mardi 20 juin 2017
Statut
Membre
Dernière intervention
21 juin 2017

Help me de nouveau.
Suite à une modification d'archi pour la mise en prod définitive, j'ai de gros bug dans le script.

Voici ma nouvelle archi.
Mes scripts sont dans le lien suivant:
C:\Users\Utilisateur\Desktop\Script-Voicemail\blat\blat3216\docs\

Mon fichier infos.txt et corps.txt également.

Dans un partage K:\ (partage d'un dossier présent sur une autre machine en linux), nous avons à la racine du partage 2 fichiers.wav et un fichier .txt du genre msg0000.txt et msg0000.wav.

en gros, lorsque un fichier .wav est présent dans mon dossier du partage, mon script de détection fait appel au script suivant:

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

@echo off
setlocal enableextensions enabledelayedexpansion

set source=K:\

cd "%source%"

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

for /f "usebackq tokens=1,* delims=^=" %%A in ("%msg%.txt") do (

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

)

endlocal


C:\Windows\System32\timeout /t 05>nul


"C:\Users\Utilisateur\Desktop\Script-Voicemail\blat\blat3216\full\blat.exe" "C:\Users\Utilisateur\Desktop\Script-Voicemail\blat\blat3216\docs\corps.txt" -s "Nouveau Message Vocale" -t "xxxxx" -server "xxxxx" -f "xxxxx" -attach "C:\Users\Utilisateur\Desktop\Script-Voicemail\blat\blat3216\docs\infos.txt" -attach "K:\%msg%.waw"



C:\Windows\System32\timeout /t 100>nul

move "K:\%msg%.*" "C:\Users\Utilisateur\Desktop\Script-Voicemail\Transmis\"



exit


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



goto :eof



Voici le resultat de la fenetre DOS quand je lance mes scripts:
Demarage.bat OK il appel bien extraire.bat

Sauf que infos.txt ne se remplis pas, que les fichiers ne se déplace pas, et du coup le mal ne part pas.



Texte capturé de la fenetre CMD:
C:\Users\Utilisateur\Desktop\Script-Voicemail\blat\blat3216\docs>for /R "K:\" %i in (*wav) do set msg=%~nxi

C:\Users\Utilisateur\Desktop\Script-Voicemail\blat\blat3216\docs>set msg=msg0000.wav

C:\Users\Utilisateur\Desktop\Script-Voicemail\blat\blat3216\docs>echo msg0000.wav

msg0000.wav

le systeme ne peut trouver le fichier msg0000.wav.txt

No files found matching search strink "K:\.waw"
One or more attachments had not been found.
Aborting, so you find / fix the missing attachement.
La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte.


Le script doit etre OK pour demain matin, je vais me pendre.
Messages postés
13546
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 juin 2021
4 399 >
Messages postés
25
Date d'inscription
mardi 20 juin 2017
Statut
Membre
Dernière intervention
21 juin 2017

Il faut utiliser les balises </code> </code> de coloration syntaxique quand tu postes du code.

Je regarde tout ça et je te tiens au courant.
Messages postés
25
Date d'inscription
mardi 20 juin 2017
Statut
Membre
Dernière intervention
21 juin 2017

apres un retournement du cerveau, ca fonctionne mais merci quand meme pour le script que tu m'a pondu hier
Messages postés
13546
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 juin 2021
4 399 >
Messages postés
25
Date d'inscription
mardi 20 juin 2017
Statut
Membre
Dernière intervention
21 juin 2017

Ok tant pis, j'avais planché sur ceci :

@echo off
setlocal enableextensions enabledelayedexpansion

set dossier=%USERPROFILE%\Desktop\Script-Voicemail\blat\blat3216

(cd /d K:) || (pause)

for /r %%i in (*.wav) do (

set msg=%%~ni
echo !msg!.wav

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

for /f "usebackq tokens=1,* delims=^=" %%A in ("!msg!.txt") do (

if /i "%%A"=="callerid" (call :numero "%%B")
if /i "%%A"=="origdate" (echo ^<!num!^> %%B >> "%dossier%\docs\infos.txt")

)

call :envoi_message

move /Y "!msg!.*" "%USERPROFILE%\Desktop\Script-Voicemail\Transmis\"

)

endlocal

exit


:numero

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

goto :eof


:envoi_message

timeout /t 5 >nul

"%dossier%\full\blat.exe" "%dossier%\docs\corps.txt" -s "Nouveau Message Vocale" -t "xxxxx" -server "xxxxx" -f "xxxxx" -attach "%dossier%\docs\infos.txt" -attach "K:\!msg!.wav"

timeout /t 100 >nul

goto :eof

rem toujours laisser une ligne vide à la fin, après 'goto :eof'
Messages postés
13546
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 juin 2021
4 399
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

Messages postés
13546
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 juin 2021
4 399 >
Messages postés
25
Date d'inscription
mardi 20 juin 2017
Statut
Membre
Dernière intervention
21 juin 2017

D'après ce que je vois, tu n'es pas positionné dans le bon dossier, il faut faire comme ça :

@echo off
setlocal enabledelayedexpansion

set source=%USERPROFILE%\Pictures\Debut

cd "%source%"

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

endlocal
pause
exit
Messages postés
25
Date d'inscription
mardi 20 juin 2017
Statut
Membre
Dernière intervention
21 juin 2017

peut-tu m'expliquer rapidement le code ?

merci de ton aide
Messages postés
13546
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 juin 2021
4 399 >
Messages postés
25
Date d'inscription
mardi 20 juin 2017
Statut
Membre
Dernière intervention
21 juin 2017

Tu ne m'as pas dit si ça marche maintenant ou pas ?

Alors je t'explique :
- le @echo off c'est pour désactiver l'affichage des commandes

- le setlocal enabledelayedexpansion c'est pour activer l'expansion retardée, on en a malheureusement besoin pour la variable !infos!

- le set source c'est pour définir le dossier où le script doit travailler

- le cd %source% c'est pour se positionner dans le dossier

- la boucle for /f sert à lire les lignes du fichier test.txt et à les découper selon un caractère (le caractère < dans ton cas)

- la variable %%A contient la première partie de chaque ligne, cette partie ne t'intéresse pas

- la variable %%B contient la partie qui nous intéresse et même plus

- le set infos=!infos:~0,34! permet de découper la variable %%B en partant du premier caractère jusqu'au 34 ème caractère
Messages postés
25
Date d'inscription
mardi 20 juin 2017
Statut
Membre
Dernière intervention
21 juin 2017

malheureusement le résultat retourné dans le fichier infos.txt est ~0-34

je ne comprend pas pourquoi.

J'ai bien fait un copier coller du code source que tu m'a fournis.
Messages postés
13546
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 juin 2021
4 399 >
Messages postés
25
Date d'inscription
mardi 20 juin 2017
Statut
Membre
Dernière intervention
21 juin 2017

C'est bien ~0-34 qui est retourné ? Ou bien ~0,34 ?
Messages postés
25
Date d'inscription
mardi 20 juin 2017
Statut
Membre
Dernière intervention
21 juin 2017

~0,34
Messages postés
13546
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 juin 2021
4 399
Est-ce que ton fichier s'appelle bien test.txt ?
Messages postés
25
Date d'inscription
mardi 20 juin 2017
Statut
Membre
Dernière intervention
21 juin 2017

oui.
Messages postés
13546
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 juin 2021
4 399
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.”
Messages postés
13546
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 juin 2021
4 399 >
Messages postés
25
Date d'inscription
mardi 20 juin 2017
Statut
Membre
Dernière intervention
21 juin 2017

- les 3 premières lignes j'ai déjà expliqué

- la 4ème ligne sert à créer un nouveau fichier ou selon le cas effacer un fichier existant

- la boucle for /f j'ai déjà expliqué, sauf que cette fois on choisit le signe = comme délimiteur

- le if sert à tester s'il s'agit d'une ligne qui intéresse ou pas, si c'est le cas on envoie la ligne entière (echo %%A=%%B) vers le fichier infos.txt
Messages postés
25
Date d'inscription
mardi 20 juin 2017
Statut
Membre
Dernière intervention
21 juin 2017

le numéro de téléphone ne s'extrait pas
Messages postés
13546
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 juin 2021
4 399 >
Messages postés
25
Date d'inscription
mardi 20 juin 2017
Statut
Membre
Dernière intervention
21 juin 2017

Ah ok j'ai pas suivi, je m'en occupe.
Messages postés
25
Date d'inscription
mardi 20 juin 2017
Statut
Membre
Dernière intervention
21 juin 2017
>
Messages postés
13546
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
19 juin 2021

voici le resultat

origdate=Tue Jun 20 06:40:00 AM UTC 2017
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.
> BN15
Tu as dû modifier quelque chose, chez moi ça marche.
;
; Message Information file
;
[message]
origmailbox=021
context=app-vmblast
macrocontext=
exten=1
rdnis=unknown
priority=1
callerchan=SIP/Bouygue-0000aa5d
callerid="LD Nathan0674861282" <674861282>
origdate=Mon Jul 10 10:21:01 AM UTC 2017
origtime=1499682061
category=
flag=
duration=4




Erreur sur le format du fichier texte fournis, d'ou l'erreur je pense.
Voici le bon format

DSL
Oui effectivement ça change tout :

@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

set num=

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

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

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

goto :eof

rem
voici le resultat:

Commande ECHO d‚sactiv‚e.
674861282
> BN15
Tu n'as que ces 2 lignes dans le fichier texte ?

Et qu'est-ce qui s'affiche dans la console ?