IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Stocker le contenu d'un fichier dans une variable [Batch]


Sujet :

Scripts/Batch

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Points : 32
    Points
    32
    Par défaut Stocker le contenu d'un fichier dans une variable
    Bonjour,

    Je débute dans les scripts Batch mais j’ai des notions en programmation.

    Voila, je voudrais récupérer le contenue d’un fichier .log dans une variable pour l’utiliser avec un VB Script qui me l’envoie par mail.

    Pour être plus précis, un de nos logiciels crée un fichier .log dès qu’une erreur ou un problème surgit.

    Mon script doit en fait prendre un fichier .log du dossier, stocker son contenue dans une variable, puis l’envoyer vers le VB Script, qui lui me l’envoie par mail et renommer le fichier log en .old.

    Au final, je reçois un mail avec le contenue du fichier log.

    Voici ce que j’ai peu trouvé en cherchant sur le net mais la partie qui doit lire le fichier log ne marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    @echo off
    TITLE %0 Script
    
    REM Chemin d acces au repertoire contenant le fichier log
    C:
    CD C:\Temp\
    
    REM Lecture du dernier fichier Log du repertoire par ordre alphabetique
    FOR /R %%i in ( dir *.log ) do set logfile=%%i
    echo : logfile : %logfile%
    
    REM Lecture du message d'erreur contenu dans le fichier log
    set message=
    set /P message= <%logfile%"
    echo message : %message%
    
    REM Chemin d acces au script VBS
    C:
    CD C:\Temp\
    DIR
    
    REM Si il y a un fichier log on appelle lo script VBS avec le message d'erreur en parametre
    IF EXIST %logfile%  (
    call LogNTEvent.vbs
    if %ERRORLEVEL% NEQ 0 (
        LogNTEvent.vbs " Un probleme de script VBS est survenu sur server01 lors de la detection d'une erreur"
    )
    
    if %ERRORLEVEL% EQU 0 (    
        REM  Log a new ERROR (0) entry
        REM  - the default setting (No additional arguments)
        LogNTEvent.vbs " L application a echoue sur server01 avec l erreur suivante : %message%  "
    ) 
    
    )
    
    REM Renome le fichier log pour qu'il ne soit plus traite
    move %logfile% %logfile%.old 
    pause
    exit /b
    Quelqu’un aurait une idée, merci d’avance !!!

    Cordialement.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Points : 247
    Points
    247
    Par défaut
    Bonjour
    tu as un message d'erreur ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @echo off
    TITLE %0 Script
    
    REM Chemin d acces au repertoire contenant le fichier log
    set chemin=C:\Temp\
    
    FOR /R "%chemin%" %%i in (*.log) do set logfile=%%i
    echo logfile : %logfile%

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Points : 32
    Points
    32
    Par défaut
    J'ai pas vraiment de message d'erreur par contre ce code ne me renvoit que la première ligne donc en fait il stocke que la première ligne du fichier log dans la variable message.

    J'ai essaier de scanner chaque ligne avec une boucle FOR mais j'arrive pas à stocker plus d'une ligne dans une variable.

    Voila la code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo Pour chaque ligne du fichier afficher son contenu
    FOR %%x IN (%logfile%) DO (
    echo %%x
    )

    Est-ce que c'est possible, à chaque fois que la boucle FOR scan une ligne,d'ajouter le résultat dans une variable ???

    Merci

  4. #4
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    salut,

    la structure que t'as utiliser ne permet de stoker qu'une seule ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set /P message= <%logfile%"
    avec la varaible: message=1er ligne

    Citation Envoyé par grandthor Voir le message


    Est-ce que c'est possible, à chaque fois que la boucle FOR scan une ligne,d'ajouter le résultat dans une variable ???
    vous pouvez faire un genre de Array telque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @echo off
    setlocal enabledelayedexpansion
    
    set c=0
    For /f "delims=" %%a In (logfile) do (
     Set table[!c!]=%%a
     Set /a c+=1
    )
    
    set table[

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par I'm_HERE Voir le message
    salut,

    la structure que t'as utiliser ne permet de stoker qu'une seule ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set /P message= <%logfile%"
    avec la varaible: message=1er ligne



    vous pouvez faire un genre de Array telque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @echo off
    setlocal enabledelayedexpansion
    
    set c=0
    For /f "delims=" %%a In (logfile) do (
     Set table[!c!]=%%a
     Set /a c+=1
    )
    
    set table[


    HA Super sa !!!
    C'est pas mal, je te remercie !

    En fait, maintenant on a stocké tout le contenue de mon fichier log dans un variable table.
    Mais comment on l'utilise cette variable ??

    Je m'explique :

    quand je fais echo message : %table[]%
    il me répond juste message :

    pourtant la commande echo message : %table[1]%
    m'affiche la première ligne

    Donc comment on fait pour afficher tout le contenue de ma variable table ??

    Parce que je dois mettre cette varaible en argument de ma fonction VBS.

    Merci I'm_HERE !!!!
    Au moin j'avance un peu ^^

  6. #6
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Points : 32
    Points
    32
    Par défaut
    J'ai eu une autre idée, qui est possible mais j'aurais besoin d'un petit coup de main.

    En fait est-ce que c'est possible d'ajouter l'une derrier l'autre, chaque lignes de mon fichier log, que je récupère avec une boucle FOR, dans une seule et même variable ??

    Un peu comme un incrémentation >> !!
    Merci

  8. #8
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    avec la boucle du lien:
    l'expansion doit être activée
    setlocal enabledelayedexpansion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /f "tokens=2 delims==" %%a In ('set table[') do Set var=!var! %%a
    echo.%var%

  9. #9
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par I'm_HERE Voir le message
    Je vois pas comment utilisé ces 2 lignes ou plustot comment les adaptés à mon script ??

    Une petit coup de pousse s'il te plait Merci !!

  10. #10
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    salut grandthor, bienvenue sur le forum
    salut I'm_HERE,

    Je viens de parcourir votre discussion. Conclusion: grosses prises de tête inutile.

    Citation Envoyé par grandthor Voir le message
    Voila, je voudrais récupérer le contenue d’un fichier .log dans une variable pour l’utiliser avec un VB Script qui me l’envoie par mail.

    Pour être plus précis, un de nos logiciels crée un fichier .log dès qu’une erreur ou un problème surgit.

    Mon script doit en fait prendre un fichier .log du dossier, stocker son contenue dans une variable, puis l’envoyer vers le VB Script, qui lui me l’envoie par mail et renommer le fichier log en .old.

    Au final, je reçois un mail avec le contenue du fichier log.

    Pour cela, il suffit à partir d'un script de commande (.cmd) de générer dynamiquement le fichier vbscript en question (.vbs), en prenant soin d'y intégrer le contenu du fichier log. L'exécution du script vbs depuis le script de commande (.cmd) entraine ainsi la transmission du texte associé au fichier Log vers la boite mail du destinataire. C'est tout.

    enjoy;

  11. #11
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 46
    Points : 32
    Points
    32
    Par défaut
    Ok ben j'ai une super nouvelle : SA MARCHE !! ^^

    Voici le code final pour ceux que sa intéresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    @echo off
    TITLE %0 Script
    
    REM Chemin d acces au repertoire contenant le fichier log
    C:
    CD C:\Temp\
    
    REM Lecture du dernier fichier Log du repertoire par ordre alphabetique
    FOR /R %%i in ( dir *.log ) do set logfile=%%i
    echo : logfile : %logfile%
    
    REM Permet d'utiliser de nouvelle commande =>indispensable
    setlocal enabledelayedexpansion
    
    REM Boucle qui stocker chaque ligne dans une Array
    set c=0
    For /f "delims=" %%a In (%logfile%) 
    do (
     Set table[!c!]=%%a
     Set /a c+=1
    )
    
    REM Initialise l'Array
    set table[
    
    REM Incremente chaque ligne de l'Array dans une variable
    for /f "tokens=2 delims==" %%a In ('set table[')
    do Set var=!var! %%a
    
    REM Affiche la variable
    echo.%var%
    
    REM Chemin d acces au script VBS
    C:
    CD C:\Temp\
    DIR
    
    REM Si il y a un fichier log on appelle lo script VBS avec le message d'erreur en parametre
    IF EXIST %logfile%  (
    call LogNTEvent.vbs
    if %ERRORLEVEL% NEQ 0 (
        LogNTEvent.vbs " Un probleme de script VBS est survenu sur server01 lors de la detection d'une erreur "
    )
    
    if %ERRORLEVEL% EQU 0 (
        REM  Log a new ERROR (0) entry
        REM  - the default setting (No additional arguments)
        LogNTEvent.vbs " L application a echoue sur server01 avec l erreur suivante : %var% "
    )
    
    )
    
    REM Renome le fichier log pour qu'il ne soit plus traite
    move %logfile% %logfile%.old
    pause
    exit /b
    Et un grand merci pour tous ceux qui mon aider !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] recuperer le contenu d'un fichier dans une variable.
    Par Warlox dans le forum VB.NET
    Réponses: 1
    Dernier message: 18/12/2011, 16h34
  2. Réponses: 5
    Dernier message: 18/04/2011, 13h26
  3. Réponses: 3
    Dernier message: 28/05/2009, 15h27
  4. [RegEx] Stocker le contenu d'un preg_match_all dans une variable
    Par rajaneesh dans le forum Langage
    Réponses: 1
    Dernier message: 08/12/2008, 09h49
  5. Récupérer contenu de fichier dans une variable
    Par peppena dans le forum Linux
    Réponses: 4
    Dernier message: 15/06/2005, 12h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo