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 :

connaitre l'utilisation d'un fichier .Txt via un batch [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 120
    Par défaut connaitre l'utilisation d'un fichier .Txt via un batch
    Bonjour,

    Je lance en parallèle 2 traitements automatisés via 2 fichiers .batch distincts.

    Je dois attendre la fin de l'exécution de ces 2 traitements automatisés avant de pouvoir continuer le traitement.
    Comment puis-je faire pour dire à mon fichier .batch d'attendre la fin d'exécution de mes 2 traitements précédents avant de pouvoir continuer ?

    Je ne peux pas me baser sur des durées de traitement et caler le lancement des batch sur un horaire car la fin d'exécution des 2 fichiers batch est très variable selon des contraintes que je ne maîtrise pas.

    Chacun des 2 fichiers .batch initiaux génèrent un fichier .log de suivi des traitements.
    J'envisageai de demander à mon .batch de tester l'utilisation des 2 .log avant de pouvoir continuer le traitement uniquement si aucun process n'est en cours sur les 2 log concernés.
    Mais je ne sais pas s'il s'agit de la meilleure approche de programmation en .batch et de plus, je n'ai aucune idée de comment écrire ma commande en .batch pour mettre en oeuvre ce test sur l'utilisation d'un process en cours sur un fichier .log.

    Quelles solutions pourriez-vous me proposer et comment les mettre en place ?

    Je vous remercie.
    MarieO

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Par défaut
    Bonjour,

    Il faudrait mettre en place un mécanisme de mutuelle exclusion ou "mutex".

    Je sais que cela est possible avec PowerShell, mais je ne l'ai pas encore utilisé.
    Voici une explication complète:

    Sinon l'autre possibilité, qui est plus simple, mais moins rigoureuse est d'utiliser un fichier "blabla.lock".
    Puis d'essayer de créer ce fichier en interdisant la réécriture (no overwrite), si une exception est levée il faut attendre que l'autre programme libère la ressource en supprimant le fichier.
    Mais comme il n'y pas de réel contrôle, le cas où les deux programmes auraient la possibilité de créer le même fichier au même moment est possible ...

    C'est pourquoi il est préférable de passer par des mécanismes d'exclusions mutuelles.

    Salutations.
    PS: Par contre levé des exceptions avec de simple batch, je ne suis pas très sûr du résultat ...

  3. #3
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut

    Est-ce-que vous pouvez poster les codes sources de vos batchs ?

  4. #4
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Par défaut
    salut marieo

    un exemple de script que j'utilise qui s'appuis sur des fichiers

    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
    @echo ------------------ Debut ------------------
    @echo off
    echo ------------------ attendre jusqu'a %1 ------------------
    set dd=%date%-%time:~0,5%
    echo %dd%-"--- Debut traitement " >> c:\log\err.log
    
    set d=%time:~0,5%
    set dd=%1
    
    c:
    cd \batch
    
    rem attente du traitement 1
    rem -----------------------
    :debuttrait1
    set d=%time:~0,5%
    if %d%==%dd% goto err
    if exist trait1.ok goto debuttrait2
    ping 127.0.0.1 -n 10 > NUL
    goto debuttrait1
    
    rem attente du traitement 2
    rem -----------------------
    :debuttrait2
    set d=%time:~0,5%
    if %d%==%dd% goto err
    if exist trait2.ok goto suite
    ping 127.0.0.1 -n 10 > NUL
    goto debuttrait2
    
    :suite
    ........
    ........
    goto fin
    
    :err
    set dd=%date%-%time:~0,5%
    echo %dd%-"Err dans le traitement" >> c:\log\err.log
    goto fin
    
    :fin
    en debut des batch traitement j'efface le fichier correspondant au traitement (ex.:trait1.ok)
    et je crée le fichier (ex.:trait1.ok) à la fin du batch traitement
    -- cette solution dépend de l'ordre ou tu lance tes batch, ici les batch de traitement sont lancer avant le batch de verification de traitement
    -- si c'est l'inverse il faut effacer les fichiers traitX.ok au debut du batch de verification
    -- lancer le batch verification et traitement en même temps n'est pas une bonne idée, il faut faire un décalage même que de quelques secondes entre vérification et traitement

    dans le batch de verification des traitements il y a un timeout sur une heure butoir.
    ex : verifie.bat 10:00 --- il ne faut pas le zero pour les heures a un chiffre. le matin avant 10 heures (9:00) sauf erreur
    si l'heure n'est pas indiquer et que les traitement ne finissent pas, il attend jusqu'à ce qu'on le tue !!!

    ci script ma servi tous les jours sur 5 traitements pendant 5 ans sans problèmes, avant que je passe a powershell
    j'espère que ça va t'aidé

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    J'ai déjà eu ce cas à traiter.
    J'utilise le titre des fenêtres avec un nom reconnaissable pour tester leurs présences.

    Exemple :
    batch 1
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    title mon batch 1

    batch 2
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    title mon batch 2

    batch 3, qui doit savoir si batch 1 et 2 sont en cours
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    tasklist /FI "IMAGENAME eq cmd.exe" /V /NH| find /i "mon batch"1>nul 2>nul&&echo Oui|| echo non

    Si le batch 1 ou 2 est en cours j'ai "Oui" sinon "Non".


    PS : Les mutex sont utilisables avec Powershell, je ne l'ai pas testé mais c'est sur.

  6. #6
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Par défaut
    salut

    j'ai oublier de le précisé mais la méthode que je propose est utilisé sur des bat sur plusieurs serveurs différents ce qui pour moi était indispensable !!

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 120
    Par défaut
    Bonjour,

    J'ai fait un mix des solutions proposées.

    J'ai ajouté la création d'un fichier .log en fin de traitement du batch 1 et du batch 2.
    Dans mon batch 3, je fais une boucle pour tester l'existence du fichier .log du batch 1 avec temps d'attente de 60 secondes et même chose pour le log du batch 2.

    Dès que j'ai bien les 2 .log, je continue le traitement du batch 3.

    Merci beaucoup,
    MarieO

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

Discussions similaires

  1. lecture fichier txt via fonction FTP ascii
    Par kitty2006 dans le forum SAP
    Réponses: 1
    Dernier message: 30/03/2010, 10h07
  2. Création fichier .txt via fenêtre type "enregistrer sous"
    Par sfab41 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/03/2010, 14h14
  3. [XI] Utilisation d'un fichier txt comme source de données
    Par captainamerica75 dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 14/06/2007, 15h29
  4. .vba echo dans un fichier .txt via .bat
    Par ely_j2002 dans le forum VBScript
    Réponses: 5
    Dernier message: 09/03/2007, 15h23
  5. import fichier TXT via ACCESS
    Par lepierre dans le forum Access
    Réponses: 4
    Dernier message: 03/12/2005, 06h52

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