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 :

DOS BATCH comment savoir si un programme est déjà lancé ?


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de ritchie23
    Profil pro
    Inscrit en
    Août 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2008
    Messages : 122
    Par défaut DOS BATCH comment savoir si un programme est déjà lancé ?
    Bonjour,

    j'ai un fichier test.bat qui contient le code (tout simple) suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo "coucou"
    pause
    exit
    Lorsque je clique une 1° fois sur le batch, une fenêtre dos s'ouvre m'affiche coucou et attend une réponse pour continuer.
    Si je n'appuies pas sur une touche (et donc que le batch est toujours en train de tourner) mais je je reclique sur 2° fois sur le batch, une nouvelle fenêtre s'ouvre.

    J'aurais voulu que mon batch ne s'ouvre pas si le 1° processus est toujours actif.

    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SI processus toujours actif
    ALORS ne rien faire et refermer tout de suite
    SINON traiter la demande (c'est à dire afficher coucou)

    Mais je ne sais pas coder sous DOS et fichier BAT.

    Qqun peut me donner un coup de main SVP ?

    Merci d'avance.
    Ritchie.

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Le processus en cours est la console pas le fichier batch.

    Pour faire simple: soit créer un fichier en début de batch et le supprimer en fin. PB le batch peut provoquer une erreur et dans ce cas le fichier n'est pas supprimé ce qui fausserait la prochaine exécution.

    Autre approche rechercher la présence du nom du batch dans la ligne de commande de tous les process en cours.
    Regarde les outils de Sysinternals sinon peut être avec WMI...
    [edit]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wmic PROCESS  WHERE (Description="cmd.exe") get Commandline
    CommandLine
    "C:\WINDOWS\system32\cmd.exe"
    cmd /c ""C:\Temp\s.cmd" "
    Le second est une console exécuté via Run.
    Le second est un batch en pause exécuté via l'explorer.
    Ensuite avec Find tu peux savoir si oui ou non le batch est en cours d'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @echo off
    wmic PROCESS  WHERE (Description="cmd.exe") get Commandline| Find /I "C:\Temp\s.cmd">nul
    rem 1 non la chaine n'existe pas.
    rem 0 oui la chaine existe.
    IF ERRORLEVEL 1 Echo "Existe pas"&goto suite
    IF ERRORLEVEL 0 Echo "Existe"
    :suite
    Voir les documents cités sur cette page :
    http://support.microsoft.com/kb/325427/fr

  3. #3
    Membre confirmé Avatar de ritchie23
    Profil pro
    Inscrit en
    Août 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2008
    Messages : 122
    Par défaut
    Merci Laurent pour ces infos.

    malheuresement, ca ne fonctionne pas chez moi car je ne suis pas administrateur de mon pc.

    Par contre, je me suis inspiré de ton code pour pondre celui ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @echo off
    
    tasklist | find "cmd.exe" /C /i > nul
    rem : s'il trouve qqch, alors il n'y a pas d'erreur. ERRORLEVEL = 0 et donc nous passons à la suite
    
    if ERRORLEVEL 0 goto suite
    exit
    
    :suite
    echo "coucou"
    pause
    exit
    Cela détecte bien si cmd.exe est lancé ou pas.
    Mais j'ai encore un petit problème.

    Mon but est que cmd.exe ne doit etre lancé qu'une seule fois.
    Je dois donc détecter le nombre d'occurence de cmd.exe dans ma tasklist.
    Comment puis je faire STP ?

    Merci.
    Ritchie.

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ritchie23
    Je dois donc détecter le nombre d'occurence de cmd.exe dans ma tasklist.
    Tu dois détecter celui dans lequel tu exécutes ton batch, d'autres cmd peuvent être exécuté par les admins.

    Avec Tasklist essaie en filtrant sur le nom de la fenêtre ; commande batch Title

  5. #5
    Membre confirmé Avatar de ritchie23
    Profil pro
    Inscrit en
    Août 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2008
    Messages : 122
    Par défaut
    Salut Laurent,

    Merci pour tes conseils.

    J'ai donc codé ce petit programme qui fonctionne bien.
    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
    @echo off
    title praticbatch
    
    tasklist /FI "WINDOWTITLE eq praticbatch"  |find "cmd.exe" /C > nombre.ini
    
    
    set /P NOMBRE= <nombre.ini"
    echo %NOMBRE%
    DEL nombre.ini
    
    
    
    if %NOMBRE% == 1 goto suite
    echo Batch pratic deja lance
    echo.
    pause
    exit
    
    :suite
    echo "coucou"
    pause
    exit
    Mais ce n'est pas super propre : j'inscris le nombre de fenêtre dos portant le nom praticbatch dans un fichier, puis je viens lire ce fichier (%NOMBRE% est d'ailleurs un string et non pas un int) puis je supprime le fichier temporaire.

    J'aurais souhaité pouvoir directement renseigner une variable sans passer par un fichier temporaire mais là, je n'ai pas trouvé.

    J'aurais souhaité un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @echo off
    title praticbatch
    tasklist /FI "WINDOWTITLE eq praticbatch"  |find "cmd.exe" /C > %NOMBRE%
    echo %NOMBRE%
    Si tu pouvais encore m'aiguiller sur ce point, ca serait bien.
    Merci.
    Ritchie.

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ritchie23
    Si tu pouvais encore m'aiguiller sur ce point, ca serait bien.
    En direct de l'aide en ligne (XP sp3) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set /A Count=0
    for /F "usebackq" %i in (`tasklist /FI "WINDOWTITLE eq praticbatch"  ^|find "cmd.exe" /C`) do Set /A count+=%i
    echo %count%
    ^ invalide l'analyse du pipe dans la commande entre parenthèse.
    On exécute une commande et son résultat est envoyé au "processeur" de la boucle For, opération valide avec la définition de "usebackq".
    Alt-gr 7 pour obtenir l'apostrophe inverse.

Discussions similaires

  1. [VBS] comment tester si un programme est déjà lancé ?
    Par Gunner4902 dans le forum Windows
    Réponses: 0
    Dernier message: 06/08/2008, 17h04
  2. Réponses: 20
    Dernier message: 18/05/2008, 16h33
  3. [SDL][FAQ/Source] Comment savoir si le programme est actif ?
    Par fearyourself dans le forum Contribuez
    Réponses: 3
    Dernier message: 26/07/2007, 10h34
  4. Comment savoir si l'appli est déjà lancée?
    Par ®om dans le forum Général Java
    Réponses: 12
    Dernier message: 10/10/2006, 13h17
  5. Réponses: 2
    Dernier message: 14/09/2006, 23h35

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